[RFC] Why GtkMenuItem hide_on_activate property is not taken into account?
- From: Tomasz Bursztyka <tomasz bursztyka linux intel com>
- To: gtk-app-devel-list gnome org
- Subject: [RFC] Why GtkMenuItem hide_on_activate property is not taken into account?
- Date: Fri, 31 Aug 2012 15:54:46 +0300
---
Hi,
I just propose a patch below, on gtk core, to illustrate the issue I will talk about. I have probably missed
how to derivate from GtkMenuItem properly to fit my use case.
While playing around a GtkStatusIcon, so with GtkMenuShell/GtkMenu and GtkMenuItem afterwards, I wanted to
get a new widget as a derivative of GtkMenuItem, let's say: a menu item proposing GtkSwitch called
GtkSwitchMenuItem.
The main difference is that, the control below is fully async: until a reply has not come up,
it would set it as non sensitive, and then: depending on reply would set the right active value for the
switch. That works, it's easy.
But in addition to that I want such behavior so the menu itself does not popdown when I click on a
GtkSwitchMenuItem.
Looking at GtkMenuItem I saw this property hide_on_activate. Ok, by default it is set to true: I set it to
false in my GtkSwitchMenuItem code.
Still no luck.
Went further in the code, and in gtkmenushell.c: gtk_menu_shell_activate_item() is supposed to take into
account hide_on_activate property if
force_deactivate is FALSE. But in gtk_menu_shell_button_release() which is the function called when an item
is clicked: it always
call gtk_menu_shell_activate_item() with force_deactivate set to TRUE (when the item has no submenu like my
GtkSwitchMenuItem).
Due to that, whatever is the value of hide_on_activate, whatever does a replacement of GtkMenuItem activate
function: the menu is always poped down.
So I quickly changed this TRUE to FALSE in gtkmenushell.c:gtk_menu_shell_button_release () for
gtk_menu_shell_activate_item () and then: hide_on_activate
is taken care of properly, and I got the behavior I was expecting in setting hide_on_activate to FALSE.
I don't think it is a valid bug, since doing so: would make all GtkCheckMenuItem behaving like my
GtkSwitchMenuItem. (see the patch below, witch remove the
hide_on_activate set to FALSE, it was just for testing). As you can expect: changing such property on
GtkCheckMenuItem makes gtk_menu_shell_activate_item() behaving
always the same, whatever force_deactivate is. Which is probably wrong then.
So my question is: how to get this behavior for my GtkSwitchMenuItem, properly done with existing
GtkMenuShell/GtkMenuItem functions/signals?
What signals should I catch or which function should I override?
Thanks,
Tomasz
gtk/gtkcheckmenuitem.c | 1 -
gtk/gtkmenushell.c | 2 +-
2 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/gtk/gtkcheckmenuitem.c b/gtk/gtkcheckmenuitem.c
index 343565d..10bae0e 100644
--- a/gtk/gtkcheckmenuitem.c
+++ b/gtk/gtkcheckmenuitem.c
@@ -152,7 +152,6 @@ gtk_check_menu_item_class_init (GtkCheckMenuItemClass *klass)
gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE);
menu_item_class->activate = gtk_check_menu_item_activate;
- menu_item_class->hide_on_activate = FALSE;
menu_item_class->toggle_size_request = gtk_check_menu_item_toggle_size_request;
klass->toggled = NULL;
diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c
index 5099179..0db79e5 100644
--- a/gtk/gtkmenushell.c
+++ b/gtk/gtkmenushell.c
@@ -827,7 +827,7 @@ gtk_menu_shell_button_release (GtkWidget *widget,
if (submenu == NULL)
{
- gtk_menu_shell_activate_item (menu_shell, menu_item, TRUE);
+ gtk_menu_shell_activate_item (menu_shell, menu_item, FALSE);
deactivate = FALSE;
}
else if (GTK_MENU_SHELL_GET_CLASS (menu_shell)->submenu_placement != GTK_TOP_BOTTOM ||
--
1.7.8.6
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]