summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Janik <timj@gimp.org>1998-03-15 13:33:54 +0000
committerTim Janik <timj@src.gnome.org>1998-03-15 13:33:54 +0000
commitf87ee7e51a578a29afc9ec30a74a834c3d1f6948 (patch)
tree8defac6ddd16d942a68368374e0f92d9fd485b2b
parent9ce0cb6037f5019063faace67a321f47e9cece90 (diff)
downloadgtk+-f87ee7e51a578a29afc9ec30a74a834c3d1f6948.tar.gz
added new flag GTK_EXCLUSIVE_GRAB. allow exclusive grabs.
Sun Mar 15 13:25:28 1998 Tim Janik <timj@gimp.org> * gtk/gtkwidget.h: added new flag GTK_EXCLUSIVE_GRAB. * gtk/gtkmain.c: allow exclusive grabs. * gtk/gtkmenu.c: grab exclusively. * gtk/gtkmenushell.c: grab exclusively. * gtk/gtkmenushell.c: don't activate insensitive menu items when in click-selects mode. * gtk/gtkmenushell.c (gtk_menu_shell_enter_notify): activate submenus on popup. * gtk/gtkmenushell.c (gtk_menu_shell_button_release): don't take *additional* button presses into account. * gtk/gtkmenushell.c (gtk_menu_shell_button_press): don't take foreign button releases into account. oh boy, please check this out people, hope i covered all cases.
-rw-r--r--ChangeLog20
-rw-r--r--ChangeLog.pre-2-020
-rw-r--r--ChangeLog.pre-2-1020
-rw-r--r--ChangeLog.pre-2-220
-rw-r--r--ChangeLog.pre-2-420
-rw-r--r--ChangeLog.pre-2-620
-rw-r--r--ChangeLog.pre-2-820
-rw-r--r--gtk/gtkmain.c3
-rw-r--r--gtk/gtkmenu.c2
-rw-r--r--gtk/gtkmenushell.c27
-rw-r--r--gtk/gtktipsquery.c2
-rw-r--r--gtk/gtkwidget.h3
-rw-r--r--gtk/testgtk.c2
-rw-r--r--tests/testgtk.c2
14 files changed, 166 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 915963aee1..d5bceb87ed 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+Sun Mar 15 13:25:28 1998 Tim Janik <timj@gimp.org>
+
+ * gtk/gtkwidget.h: added new flag GTK_EXCLUSIVE_GRAB.
+ * gtk/gtkmain.c: allow exclusive grabs.
+
+ * gtk/gtkmenu.c: grab exclusively.
+ * gtk/gtkmenushell.c: grab exclusively.
+
+ * gtk/gtkmenushell.c: don't activate insensitive menu items when
+ in click-selects mode.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_enter_notify): activate submenus
+ on popup.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_button_release): don't take
+ *additional* button presses into account.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_button_press): don't take
+ foreign button releases into account.
+
Sun Mar 15 08:27:06 1998 Tim Janik <timj@gimp.org>
* gtk/gtktipsquery.c (gtk_tips_query_set_labels): changed run type
diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0
index 915963aee1..d5bceb87ed 100644
--- a/ChangeLog.pre-2-0
+++ b/ChangeLog.pre-2-0
@@ -1,3 +1,23 @@
+Sun Mar 15 13:25:28 1998 Tim Janik <timj@gimp.org>
+
+ * gtk/gtkwidget.h: added new flag GTK_EXCLUSIVE_GRAB.
+ * gtk/gtkmain.c: allow exclusive grabs.
+
+ * gtk/gtkmenu.c: grab exclusively.
+ * gtk/gtkmenushell.c: grab exclusively.
+
+ * gtk/gtkmenushell.c: don't activate insensitive menu items when
+ in click-selects mode.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_enter_notify): activate submenus
+ on popup.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_button_release): don't take
+ *additional* button presses into account.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_button_press): don't take
+ foreign button releases into account.
+
Sun Mar 15 08:27:06 1998 Tim Janik <timj@gimp.org>
* gtk/gtktipsquery.c (gtk_tips_query_set_labels): changed run type
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 915963aee1..d5bceb87ed 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,23 @@
+Sun Mar 15 13:25:28 1998 Tim Janik <timj@gimp.org>
+
+ * gtk/gtkwidget.h: added new flag GTK_EXCLUSIVE_GRAB.
+ * gtk/gtkmain.c: allow exclusive grabs.
+
+ * gtk/gtkmenu.c: grab exclusively.
+ * gtk/gtkmenushell.c: grab exclusively.
+
+ * gtk/gtkmenushell.c: don't activate insensitive menu items when
+ in click-selects mode.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_enter_notify): activate submenus
+ on popup.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_button_release): don't take
+ *additional* button presses into account.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_button_press): don't take
+ foreign button releases into account.
+
Sun Mar 15 08:27:06 1998 Tim Janik <timj@gimp.org>
* gtk/gtktipsquery.c (gtk_tips_query_set_labels): changed run type
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index 915963aee1..d5bceb87ed 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -1,3 +1,23 @@
+Sun Mar 15 13:25:28 1998 Tim Janik <timj@gimp.org>
+
+ * gtk/gtkwidget.h: added new flag GTK_EXCLUSIVE_GRAB.
+ * gtk/gtkmain.c: allow exclusive grabs.
+
+ * gtk/gtkmenu.c: grab exclusively.
+ * gtk/gtkmenushell.c: grab exclusively.
+
+ * gtk/gtkmenushell.c: don't activate insensitive menu items when
+ in click-selects mode.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_enter_notify): activate submenus
+ on popup.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_button_release): don't take
+ *additional* button presses into account.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_button_press): don't take
+ foreign button releases into account.
+
Sun Mar 15 08:27:06 1998 Tim Janik <timj@gimp.org>
* gtk/gtktipsquery.c (gtk_tips_query_set_labels): changed run type
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index 915963aee1..d5bceb87ed 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -1,3 +1,23 @@
+Sun Mar 15 13:25:28 1998 Tim Janik <timj@gimp.org>
+
+ * gtk/gtkwidget.h: added new flag GTK_EXCLUSIVE_GRAB.
+ * gtk/gtkmain.c: allow exclusive grabs.
+
+ * gtk/gtkmenu.c: grab exclusively.
+ * gtk/gtkmenushell.c: grab exclusively.
+
+ * gtk/gtkmenushell.c: don't activate insensitive menu items when
+ in click-selects mode.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_enter_notify): activate submenus
+ on popup.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_button_release): don't take
+ *additional* button presses into account.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_button_press): don't take
+ foreign button releases into account.
+
Sun Mar 15 08:27:06 1998 Tim Janik <timj@gimp.org>
* gtk/gtktipsquery.c (gtk_tips_query_set_labels): changed run type
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index 915963aee1..d5bceb87ed 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,23 @@
+Sun Mar 15 13:25:28 1998 Tim Janik <timj@gimp.org>
+
+ * gtk/gtkwidget.h: added new flag GTK_EXCLUSIVE_GRAB.
+ * gtk/gtkmain.c: allow exclusive grabs.
+
+ * gtk/gtkmenu.c: grab exclusively.
+ * gtk/gtkmenushell.c: grab exclusively.
+
+ * gtk/gtkmenushell.c: don't activate insensitive menu items when
+ in click-selects mode.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_enter_notify): activate submenus
+ on popup.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_button_release): don't take
+ *additional* button presses into account.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_button_press): don't take
+ foreign button releases into account.
+
Sun Mar 15 08:27:06 1998 Tim Janik <timj@gimp.org>
* gtk/gtktipsquery.c (gtk_tips_query_set_labels): changed run type
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index 915963aee1..d5bceb87ed 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,23 @@
+Sun Mar 15 13:25:28 1998 Tim Janik <timj@gimp.org>
+
+ * gtk/gtkwidget.h: added new flag GTK_EXCLUSIVE_GRAB.
+ * gtk/gtkmain.c: allow exclusive grabs.
+
+ * gtk/gtkmenu.c: grab exclusively.
+ * gtk/gtkmenushell.c: grab exclusively.
+
+ * gtk/gtkmenushell.c: don't activate insensitive menu items when
+ in click-selects mode.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_enter_notify): activate submenus
+ on popup.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_button_release): don't take
+ *additional* button presses into account.
+
+ * gtk/gtkmenushell.c (gtk_menu_shell_button_press): don't take
+ foreign button releases into account.
+
Sun Mar 15 08:27:06 1998 Tim Janik <timj@gimp.org>
* gtk/gtktipsquery.c (gtk_tips_query_set_labels): changed run type
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
index 8083233141..b9156ec859 100644
--- a/gtk/gtkmain.c
+++ b/gtk/gtkmain.c
@@ -510,7 +510,8 @@ gtk_main_iteration_do (gboolean blocking)
* then we send the event to the original event widget.
* This is the key to implementing modality.
*/
- if (gtk_widget_is_ancestor (event_widget, grab_widget))
+ if (!GTK_WIDGET_EXCLUSIVE_GRAB (grab_widget) &&
+ gtk_widget_is_ancestor (event_widget, grab_widget))
grab_widget = event_widget;
}
else
diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c
index 2e2e098223..0ed1b49dca 100644
--- a/gtk/gtkmenu.c
+++ b/gtk/gtkmenu.c
@@ -293,6 +293,7 @@ gtk_menu_popup (GtkMenu *menu,
gtk_widget_show (GTK_WIDGET (menu));
gtk_grab_add (GTK_WIDGET (menu));
+ GTK_WIDGET_SET_FLAGS (menu, GTK_EXCLUSIVE_GRAB);
}
void
@@ -317,6 +318,7 @@ gtk_menu_popdown (GtkMenu *menu)
gtk_widget_hide (GTK_WIDGET (menu));
gtk_grab_remove (GTK_WIDGET (menu));
+ GTK_WIDGET_SET_FLAGS (menu, GTK_EXCLUSIVE_GRAB);
}
GtkWidget*
diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c
index 0e815562f4..8b362ee66e 100644
--- a/gtk/gtkmenushell.c
+++ b/gtk/gtkmenushell.c
@@ -298,11 +298,17 @@ gtk_menu_shell_button_press (GtkWidget *widget,
if (!menu_shell->active)
{
gtk_grab_add (GTK_WIDGET (widget));
+ GTK_WIDGET_SET_FLAGS (widget, GTK_EXCLUSIVE_GRAB);
menu_shell->have_grab = TRUE;
+ menu_shell->active = TRUE;
}
- menu_shell->active = TRUE;
+ menu_shell->button = event->button;
menu_item = gtk_get_event_widget ((GdkEvent*) event);
+
+ if (!GTK_WIDGET_IS_SENSITIVE (menu_item))
+ return TRUE;
+
if (menu_item && GTK_IS_MENU_ITEM (menu_item) &&
gtk_menu_shell_is_item (menu_shell, menu_item))
{
@@ -318,13 +324,6 @@ gtk_menu_shell_button_press (GtkWidget *widget,
gtk_menu_item_select (GTK_MENU_ITEM (menu_shell->active_menu_item));
}
}
- else if (!menu_shell->button)
- {
- gtk_menu_shell_deactivate (menu_shell);
- }
-
- if (menu_shell->active)
- menu_shell->button = event->button;
}
else
{
@@ -351,16 +350,19 @@ gtk_menu_shell_button_release (GtkWidget *widget,
menu_shell = GTK_MENU_SHELL (widget);
if (menu_shell->active)
{
- if (menu_shell->button && (event->button != menu_shell->button))
+ if (event->button != menu_shell->button)
{
- menu_shell->button = 0;
if (menu_shell->parent_menu_shell)
gtk_widget_event (menu_shell->parent_menu_shell, (GdkEvent*) event);
return TRUE;
}
-
+
menu_shell->button = 0;
menu_item = gtk_get_event_widget ((GdkEvent*) event);
+
+ if (!GTK_WIDGET_IS_SENSITIVE (menu_item))
+ return TRUE;
+
deactivate = TRUE;
if ((event->time - menu_shell->activate_time) > MENU_SHELL_TIMEOUT)
@@ -437,6 +439,8 @@ gtk_menu_shell_enter_notify (GtkWidget *widget,
gtk_menu_item_set_placement (GTK_MENU_ITEM (menu_shell->active_menu_item),
MENU_SHELL_CLASS (menu_shell)->submenu_placement);
gtk_menu_item_select (GTK_MENU_ITEM (menu_shell->active_menu_item));
+ if (GTK_MENU_ITEM (menu_shell->active_menu_item)->submenu)
+ gtk_widget_activate (menu_shell->active_menu_item);
}
}
else if (menu_shell->parent_menu_shell)
@@ -574,6 +578,7 @@ gtk_real_menu_shell_deactivate (GtkMenuShell *menu_shell)
{
menu_shell->have_grab = FALSE;
gtk_grab_remove (GTK_WIDGET (menu_shell));
+ GTK_WIDGET_UNSET_FLAGS (menu_shell, GTK_EXCLUSIVE_GRAB);
}
if (menu_shell->have_xgrab)
{
diff --git a/gtk/gtktipsquery.c b/gtk/gtktipsquery.c
index 6c1b1b90c9..5c2a97239b 100644
--- a/gtk/gtktipsquery.c
+++ b/gtk/gtktipsquery.c
@@ -17,8 +17,6 @@
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id$
*/
#include "gtktipsquery.h"
#include "gtksignal.h"
diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
index a313a2af0d..87338b076b 100644
--- a/gtk/gtkwidget.h
+++ b/gtk/gtkwidget.h
@@ -48,7 +48,7 @@ enum
GTK_HAS_DEFAULT = 1 << 14,
GTK_HAS_GRAB = 1 << 15,
GTK_BASIC = 1 << 16,
- GTK_RESERVED_3 = 1 << 17,
+ GTK_EXCLUSIVE_GRAB = 1 << 17,
GTK_RC_STYLE = 1 << 18
};
@@ -86,6 +86,7 @@ enum
#define GTK_WIDGET_HAS_DEFAULT(wid) (GTK_WIDGET_FLAGS (wid) & GTK_HAS_DEFAULT)
#define GTK_WIDGET_HAS_GRAB(wid) (GTK_WIDGET_FLAGS (wid) & GTK_HAS_GRAB)
#define GTK_WIDGET_BASIC(wid) (GTK_WIDGET_FLAGS (wid) & GTK_BASIC)
+#define GTK_WIDGET_EXCLUSIVE_GRAB(wid) (GTK_WIDGET_FLAGS (wid) & GTK_EXCLUSIVE_GRAB)
#define GTK_WIDGET_RC_STYLE(wid) (GTK_WIDGET_FLAGS (wid) & GTK_RC_STYLE)
/* Macros for setting and clearing widget flags.
diff --git a/gtk/testgtk.c b/gtk/testgtk.c
index 068666749d..8f05ebddb9 100644
--- a/gtk/testgtk.c
+++ b/gtk/testgtk.c
@@ -1924,6 +1924,8 @@ create_menu (int depth)
gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
gtk_menu_append (GTK_MENU (menu), menuitem);
gtk_widget_show (menuitem);
+ if (i == 3)
+ gtk_widget_set_sensitive (menuitem, FALSE);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1));
}
diff --git a/tests/testgtk.c b/tests/testgtk.c
index 068666749d..8f05ebddb9 100644
--- a/tests/testgtk.c
+++ b/tests/testgtk.c
@@ -1924,6 +1924,8 @@ create_menu (int depth)
gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
gtk_menu_append (GTK_MENU (menu), menuitem);
gtk_widget_show (menuitem);
+ if (i == 3)
+ gtk_widget_set_sensitive (menuitem, FALSE);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1));
}