SF.net SVN: geany:[4414] trunk
eht16 at users.sourceforge.net
eht16 at xxxxx
Mon Nov 9 19:13:45 UTC 2009
Revision: 4414
http://geany.svn.sourceforge.net/geany/?rev=4414&view=rev
Author: eht16
Date: 2009-11-09 19:13:45 +0000 (Mon, 09 Nov 2009)
Log Message:
-----------
Only set the menu of the button if a non-empty GtkMenu is passed to geany_menu_button_action_set_menu() so the menu arrow keeps insensitive.
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/geanymenubuttonaction.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2009-11-09 19:06:30 UTC (rev 4413)
+++ trunk/ChangeLog 2009-11-09 19:13:45 UTC (rev 4414)
@@ -5,6 +5,10 @@
could be loaded which is only displayed *if* libvte.so is loaded.
* src/editor.c:
Allow autocompletion for HTML entities even within a word.
+ * src/geanymenubuttonaction.c:
+ Only set the menu of the button if a non-empty GtkMenu is passed to
+ geany_menu_button_action_set_menu() so the menu arrow keeps
+ insensitive.
2009-11-07 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: trunk/src/geanymenubuttonaction.c
===================================================================
--- trunk/src/geanymenubuttonaction.c 2009-11-09 19:06:30 UTC (rev 4413)
+++ trunk/src/geanymenubuttonaction.c 2009-11-09 19:13:45 UTC (rev 4414)
@@ -44,7 +44,6 @@
enum
{
BUTTON_CLICKED,
-
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL];
@@ -126,19 +125,55 @@
}
-void geany_menu_button_action_set_menu(GeanyMenubuttonAction *action, GtkWidget *menu)
+static void menu_items_changed_cb(GtkContainer *container, GtkWidget *widget, GeanyMenubuttonAction *action)
{
GeanyMenubuttonActionPrivate *priv;
+ gboolean enable;
GSList *l;
g_return_if_fail(action != NULL);
priv = GEANY_MENU_BUTTON_ACTION_GET_PRIVATE(action);
+ if (priv->menu != NULL)
+ enable = (g_list_length(gtk_container_get_children(GTK_CONTAINER(priv->menu))) > 0);
+ else
+ enable = FALSE;
- priv->menu = menu;
+ if (enable)
+ {
+ foreach_slist(l, gtk_action_get_proxies(GTK_ACTION(action)))
+ {
+ if (gtk_menu_tool_button_get_menu(GTK_MENU_TOOL_BUTTON(l->data)) == NULL)
+ gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(l->data), priv->menu);
+ }
+ }
+ else
+ {
+ foreach_slist(l, gtk_action_get_proxies(GTK_ACTION(action)))
+ {
+ gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(l->data), NULL);
+ }
+ }
+}
- foreach_slist(l, gtk_action_get_proxies(GTK_ACTION(action)))
+
+void geany_menu_button_action_set_menu(GeanyMenubuttonAction *action, GtkWidget *menu)
+{
+ GeanyMenubuttonActionPrivate *priv;
+
+ g_return_if_fail(action != NULL);
+
+ priv = GEANY_MENU_BUTTON_ACTION_GET_PRIVATE(action);
+
+ if (priv->menu != NULL)
+ g_signal_handlers_disconnect_by_func(priv->menu, menu_items_changed_cb, action);
+ if (menu != NULL)
{
- gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(l->data), priv->menu);
+ g_signal_connect(menu, "add", G_CALLBACK(menu_items_changed_cb), action);
+ g_signal_connect(menu, "remove", G_CALLBACK(menu_items_changed_cb), action);
}
+
+ priv->menu = menu;
+
+ menu_items_changed_cb(GTK_CONTAINER(menu), NULL, action);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list