Browse Source

pstats: Add keyboard shortcuts in GTK+ implementation

rdb 3 years ago
parent
commit
1e542a43a1

+ 2 - 0
pandatool/src/gtk-stats/gtkStatsGraph.cxx

@@ -55,6 +55,8 @@ GtkStatsGraph(GtkStatsMonitor *monitor, bool has_label_stack) :
   //gtk_window_set_transient_for(GTK_WINDOW(_window), GTK_WINDOW(parent_window));
   //gtk_window_set_position(GTK_WINDOW(_window), GTK_WIN_POS_CENTER_ON_PARENT);
 
+  gtk_window_add_accel_group(GTK_WINDOW(_window), monitor->get_accel_group());
+
   gtk_widget_add_events(_window,
       GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
       GDK_POINTER_MOTION_MASK);

+ 8 - 0
pandatool/src/gtk-stats/gtkStatsMonitor.cxx

@@ -270,6 +270,14 @@ get_window() const {
   return _window;
 }
 
+/**
+ *
+ */
+GtkAccelGroup *GtkStatsMonitor::
+get_accel_group() const {
+  return ((GtkStatsServer *)_server)->get_accel_group();
+}
+
 /**
  * Returns the screen DPI.
  */

+ 1 - 0
pandatool/src/gtk-stats/gtkStatsMonitor.h

@@ -78,6 +78,7 @@ public:
   virtual void user_guide_bars_changed();
 
   GtkWidget *get_window() const;
+  GtkAccelGroup *get_accel_group() const;
   double get_resolution() const;
 
   PStatGraph *open_timeline();

+ 20 - 37
pandatool/src/gtk-stats/gtkStatsServer.cxx

@@ -30,9 +30,6 @@ GtkStatsServer() {
 #endif
   _last_session.set_binary();
 
-  _window = nullptr;
-  _menu_bar = nullptr;
-  _options_menu = nullptr;
 
   _time_units = 0;
 
@@ -417,6 +414,14 @@ get_window() const {
   return _window;
 }
 
+/**
+ * Returns the server window's accelerator group.
+ */
+GtkAccelGroup *GtkStatsServer::
+get_accel_group() const {
+  return _accel_group;
+}
+
 /**
  * Returns the menu handle to the server's menu bar.
  */
@@ -479,8 +484,8 @@ create_window() {
     }), this);
 
   // Set up the menu.
-  GtkAccelGroup *accel_group = gtk_accel_group_new();
-  gtk_window_add_accel_group(GTK_WINDOW(_window), accel_group);
+  _accel_group = gtk_accel_group_new();
+  gtk_window_add_accel_group(GTK_WINDOW(_window), _accel_group);
   _menu_bar = gtk_menu_bar_new();
 
   setup_session_menu();
@@ -533,6 +538,8 @@ setup_session_menu() {
       GtkStatsServer *self = (GtkStatsServer *)data;
       self->new_session();
     }), this);
+  gtk_widget_add_accelerator(item, "activate", _accel_group,
+                             GDK_KEY_n, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
 
   item = gtk_menu_item_new_with_mnemonic("_Open Session...");
   gtk_menu_shell_append(GTK_MENU_SHELL(_session_menu), item);
@@ -541,6 +548,8 @@ setup_session_menu() {
       GtkStatsServer *self = (GtkStatsServer *)data;
       self->open_session();
     }), this);
+  gtk_widget_add_accelerator(item, "activate", _accel_group,
+                             GDK_KEY_o, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
 
   item = gtk_menu_item_new_with_mnemonic("Open _Last Session");
   _open_last_session_menu_item = item;
@@ -564,6 +573,8 @@ setup_session_menu() {
       GtkStatsServer *self = (GtkStatsServer *)data;
       self->save_session();
     }), this);
+  gtk_widget_add_accelerator(item, "activate", _accel_group,
+                             GDK_KEY_s, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
 
   item = gtk_menu_item_new_with_mnemonic("_Close Session");
   _close_session_menu_item = item;
@@ -574,6 +585,8 @@ setup_session_menu() {
       GtkStatsServer *self = (GtkStatsServer *)data;
       self->close_session();
     }), this);
+  gtk_widget_add_accelerator(item, "activate", _accel_group,
+                             GDK_KEY_w, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
 
   GtkWidget *sep = gtk_separator_menu_item_new();
   gtk_menu_shell_append(GTK_MENU_SHELL(_session_menu), sep);
@@ -600,40 +613,10 @@ setup_session_menu() {
         gtk_main_quit();
       }
     }), this);
+  gtk_widget_add_accelerator(item, "activate", _accel_group,
+                             GDK_KEY_q, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
 
   gtk_widget_show_all(_session_menu);
-
-  /*
-  _session_menu = CreatePopupMenu();
-
-  MENUITEMINFO mii;
-  memset(&mii, 0, sizeof(mii));
-  mii.cbSize = sizeof(mii);
-
-  mii.fMask = MIIM_STRING | MIIM_FTYPE | MIIM_SUBMENU;
-  mii.fType = MFT_STRING;
-  mii.hSubMenu = _session_menu;
-
-  mii.dwTypeData = "&Session";
-  InsertMenuItem(_menu_bar, GetMenuItemCount(_menu_bar), TRUE, &mii);
-
-  AppendMenu(_session_menu, MF_STRING, MI_session_new, "&New Session\tCtrl+N");
-  AppendMenu(_session_menu, MF_STRING, MI_session_open, "&Open Session...\tCtrl+O");
-
-  if (_last_session.exists()) {
-    AppendMenu(_session_menu, MF_STRING, MI_session_open_last, "Open &Last Session");
-  } else {
-    AppendMenu(_session_menu, MF_STRING | MF_DISABLED, MI_session_open_last, "Open &Last Session");
-  }
-
-  AppendMenu(_session_menu, MF_STRING | MF_DISABLED, MI_session_save, "&Save Session...\tCtrl+S");
-  AppendMenu(_session_menu, MF_STRING | MF_DISABLED, MI_session_close, "&Close Session\tCtrl+W");
-
-  AppendMenu(_session_menu, MF_SEPARATOR, 0, nullptr);
-  AppendMenu(_session_menu, MF_STRING | MF_DISABLED, MI_session_export_json, "&Export as JSON...");
-
-  AppendMenu(_session_menu, MF_SEPARATOR, 0, nullptr);
-  AppendMenu(_session_menu, MF_STRING, MI_exit, "E&xit");*/
 }
 
 /**

+ 6 - 4
pandatool/src/gtk-stats/gtkStatsServer.h

@@ -36,6 +36,7 @@ public:
   bool close_session();
 
   GtkWidget *get_window() const;
+  GtkAccelGroup *get_accel_group() const;
   GtkWidget *get_menu_bar() const;
   GtkWidget *get_status_bar() const;
 
@@ -57,10 +58,11 @@ private:
   Filename _last_session;
   Filename _save_filename;
 
-  GtkWidget *_window;
-  GtkWidget *_menu_bar;
-  GtkWidget *_session_menu;
-  GtkWidget *_options_menu;
+  GtkWidget *_window = nullptr;
+  GtkAccelGroup *_accel_group = nullptr;
+  GtkWidget *_menu_bar = nullptr;
+  GtkWidget *_session_menu = nullptr;
+  GtkWidget *_options_menu = nullptr;
   GtkWidget *_status_bar;
   GtkWidget *_status_bar_label = nullptr;
   GtkWidget *_new_session_menu_item;