]> git.eshelyaron.com Git - emacs.git/commitdiff
* xmenu.c (popup_get_selection): Pop down on C-g.
authorJan Djärv <jan.h.d@swipnet.se>
Mon, 27 Dec 2004 15:24:12 +0000 (15:24 +0000)
committerJan Djärv <jan.h.d@swipnet.se>
Mon, 27 Dec 2004 15:24:12 +0000 (15:24 +0000)
(set_frame_menubar): Install translations for Lucid/Motif/Lesstif that
pops down menu on C-g.
(xdialog_show): If dialog popped down and no button in the dialog was
pushed, call Fsignal to quit.
(xmenu_show): In no toolkit version, if menu returns NO_SELECT call
Fsignal to quit.

* xfns.c (Fx_file_dialog): Motif/Lesstif version:  Pop down on C-g.

* gtkutil.c (xg_initialize): Install bindings for C-g so that
dialogs and menus pop down.

src/ChangeLog
src/gtkutil.c
src/xfns.c
src/xmenu.c

index 5593e98906dcd924b34ca5c417b3f11893c57f06..d93105c4f060926dad5fec23c9ee4d0c8386d3cc 100644 (file)
@@ -1,3 +1,18 @@
+2004-12-27  Jan Dj\e,Ad\e(Brv  <jan.h.d@swipnet.se>
+
+       * xmenu.c (popup_get_selection): Pop down on C-g.
+       (set_frame_menubar): Install translations for Lucid/Motif/Lesstif that
+       pops down menu on C-g.
+       (xdialog_show): If dialog popped down and no button in the dialog was
+       pushed, call Fsignal to quit.
+       (xmenu_show): In no toolkit version, if menu returns NO_SELECT call
+       Fsignal to quit.
+
+       * xfns.c (Fx_file_dialog): Motif/Lesstif version:  Pop down on C-g.
+
+       * gtkutil.c (xg_initialize): Install bindings for C-g so that
+       dialogs and menus pop down.
+
 2004-12-25  Jan Dj\e,Ad\e(Brv  <jan.h.d@swipnet.se>
 
        * gtkutil.c (update_frame_tool_bar): Make the value of
index 5d2b9becb9d6da00e9f7a9282caa6e8126590e53..22919230a65ff7310f4da341ff89a18dc73b8745 100644 (file)
@@ -3578,6 +3578,8 @@ free_frame_tool_bar (f)
 void
 xg_initialize ()
 {
+  GtkBindingSet *binding_set;
+
   xg_ignore_gtk_scrollbar = 0;
   xg_detached_menus = 0;
   xg_menu_cb_list.prev = xg_menu_cb_list.next =
@@ -3600,6 +3602,17 @@ xg_initialize ()
                                     "gtk-key-theme-name",
                                     "Emacs",
                                     EMACS_CLASS);
+
+  /* Make dialogs close on C-g.  Since file dialog inherits from
+     dialog, this works for them also.  */
+  binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_DIALOG));
+  gtk_binding_entry_add_signal (binding_set, GDK_g, GDK_CONTROL_MASK,
+                                "close", 0);
+
+  /* Make menus close on C-g.  */
+  binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_MENU_SHELL));
+  gtk_binding_entry_add_signal (binding_set, GDK_g, GDK_CONTROL_MASK,
+                                "cancel", 0);
 }
 
 #endif /* USE_GTK */
index aa66c017f3c6afc7a16ef1114a8cd6237922c8d0..9ee459680aa6edb1a6c5216a542b661d0c13ef6b 100644 (file)
@@ -5243,6 +5243,16 @@ or directory must exist.  ONLY-DIR-P is ignored."  */)
       XEvent event;
       x_menu_wait_for_event (0);
       XtAppNextEvent (Xt_app_con, &event);
+      if (event.type == KeyPress
+          && FRAME_X_DISPLAY (f) == event.xkey.display)
+        {
+          KeySym keysym = XLookupKeysym (&event.xkey, 0);
+
+          /* Pop down on C-g.  */
+          if (keysym == XK_g && (event.xkey.state & ControlMask) != 0)
+            XtUnmanageChild (dialog);
+        }
+  
       (void) x_dispatch_event (&event, FRAME_X_DISPLAY (f));
     }
 
index ff012634b50fd9e4767a4b17d8167f31091eb68a..b20147417bec14395c488085fa49f240ec860d64 100644 (file)
@@ -1243,6 +1243,11 @@ popup_get_selection (initial_event, dpyinfo, id, do_timers, down_on_keypress)
                && dpyinfo->display == event.xbutton.display)
         {
           KeySym keysym = XLookupKeysym (&event.xkey, 0);
+
+          /* Pop down on C-g.  */
+          if (keysym == XK_g && (event.xkey.state & ControlMask) != 0)
+            popup_activated_flag = 0;
+
           if (!IsModifierKey (keysym)
               && x_any_window_to_frame (dpyinfo, event.xany.window) != NULL)
            popup_activated_flag = 0;
@@ -2226,6 +2231,9 @@ set_frame_menubar (f, first_time, deep_p)
     }
   else
     {
+      char menuOverride[] = "Ctrl<KeyPress>g: MenuGadgetEscape()";
+      XtTranslations  override = XtParseTranslationTable (menuOverride);
+
       menubar_widget = lw_create_widget ("menubar", "menubar", id, first_wv,
                                         f->output_data.x->column_widget,
                                         0,
@@ -2234,6 +2242,9 @@ set_frame_menubar (f, first_time, deep_p)
                                         popup_deactivate_callback,
                                         menu_highlight_callback);
       f->output_data.x->menubar_widget = menubar_widget;
+
+      /* Make menu pop down on C-g.  */
+      XtOverrideTranslations (menubar_widget, override);
     }
 
   {
@@ -3155,6 +3166,9 @@ xdialog_show (f, keymaps, title, error)
            }
        }
     }
+  else
+    /* Make "Cancel" equivalent to C-g.  */
+    Fsignal (Qquit, Qnil);
 
   return Qnil;
 }
@@ -3500,7 +3514,13 @@ xmenu_show (f, x, y, for_click, keymaps, title, error)
     case XM_FAILURE:
       *error = "Can't activate menu";
     case XM_IA_SELECT:
+      entry = Qnil;
+      break;
     case XM_NO_SELECT:
+      /* Make "Cancel" equivalent to C-g unless this menu was popped up by
+         a mouse press.  */
+      if (! for_click)
+        Fsignal (Qquit, Qnil);
       entry = Qnil;
       break;
     }