aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-gtk
diff options
context:
space:
mode:
authorDidier Roche <didier.roche@canonical.com>2012-09-20 18:46:43 +0200
committerDidier Roche <didier.roche@canonical.com>2012-09-20 18:46:43 +0200
commit7cc396a8a286cebb890aa718530d2acda63fa7df (patch)
tree7cdde9cd0352fb262a893683b8b2c93e5a4f7ffe /libdbusmenu-gtk
parent39588b350296d635de3dcbb4ea8499c8c693b90e (diff)
parentc36de4d59150df37ec782a17fb3d14424fb4734a (diff)
downloadlibdbusmenu-7cc396a8a286cebb890aa718530d2acda63fa7df.tar.gz
libdbusmenu-7cc396a8a286cebb890aa718530d2acda63fa7df.tar.bz2
libdbusmenu-7cc396a8a286cebb890aa718530d2acda63fa7df.zip
* New upstream release.
- Honor changes to GtkSettings' gtk-menu-images value (LP: #927236) - don't display an underscore on menuitimes containing a '&' (LP: #994564) - set the widget for the accelerator even if there isn't a mnemonic (LP: #982656) - make the vala bindings use pkg-config names, rather than gir ones - Some platforms don't have valgrind, so treat those unit tests separately - make headers match independent of the build directory - constify some public API calls
Diffstat (limited to 'libdbusmenu-gtk')
-rw-r--r--libdbusmenu-gtk/Makefile.am8
-rw-r--r--libdbusmenu-gtk/Makefile.in65
-rw-r--r--libdbusmenu-gtk/parser.c63
3 files changed, 120 insertions, 16 deletions
diff --git a/libdbusmenu-gtk/Makefile.am b/libdbusmenu-gtk/Makefile.am
index b52098f..a255a69 100644
--- a/libdbusmenu-gtk/Makefile.am
+++ b/libdbusmenu-gtk/Makefile.am
@@ -160,14 +160,14 @@ if HAVE_VALA
if HAVE_INTROSPECTION
vapidir = $(datadir)/vala/vapi
-vapi_DATA = DbusmenuGtk$(VER)-0.4.vapi
+vapi_DATA = dbusmenu-gtk$(VER)-0.4.vapi
-DbusmenuGtk$(VER)-0.4.vapi: DbusmenuGtk$(VER)-0.4.tmp.gir Makefile.am
- $(VALA_API_GEN) --library=DbusmenuGtk$(VER)-0.4 \
+dbusmenu-gtk$(VER)-0.4.vapi: DbusmenuGtk$(VER)-0.4.tmp.gir Makefile.am
+ $(VALA_API_GEN) --library=dbusmenu-gtk$(VER)-0.4 \
--pkg gdk-pixbuf-2.0 \
--pkg $(GTKVALA) \
--pkg atk \
- --pkg Dbusmenu-0.4 \
+ --pkg dbusmenu-glib-0.4 \
--vapidir=$(top_builddir)/libdbusmenu-glib \
$<
diff --git a/libdbusmenu-gtk/Makefile.in b/libdbusmenu-gtk/Makefile.in
index 19481eb..d1586c1 100644
--- a/libdbusmenu-gtk/Makefile.in
+++ b/libdbusmenu-gtk/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# Makefile.in generated by automake 1.11.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -35,6 +35,23 @@
VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@@ -171,6 +188,11 @@ am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libdbusmenu_gtk_la_SOURCES) $(libdbusmenu_gtk3_la_SOURCES)
DIST_SOURCES = $(libdbusmenu_gtk_la_SOURCES) \
$(libdbusmenu_gtk3_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
DATA = $(gir_DATA) $(pkgconfig_DATA) $(typelib_DATA) $(vapi_DATA)
HEADERS = $(libdbusmenu_gtk3include_HEADERS) \
$(libdbusmenu_gtkinclude_HEADERS)
@@ -494,7 +516,7 @@ INTROSPECTION_COMPILER_ARGS = --includedir=$(builddir) --includedir=$(top_buildd
# VAPI Files
#########################
@HAVE_INTROSPECTION_TRUE@@HAVE_VALA_TRUE@vapidir = $(datadir)/vala/vapi
-@HAVE_INTROSPECTION_TRUE@@HAVE_VALA_TRUE@vapi_DATA = DbusmenuGtk$(VER)-0.4.vapi
+@HAVE_INTROSPECTION_TRUE@@HAVE_VALA_TRUE@vapi_DATA = dbusmenu-gtk$(VER)-0.4.vapi
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -537,7 +559,6 @@ dbusmenu-gtk3-0.4.pc: $(top_builddir)/config.status $(srcdir)/dbusmenu-gtk3-0.4.
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
- test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
list2=; for p in $$list; do \
if test -f $$p; then \
@@ -545,6 +566,8 @@ install-libLTLIBRARIES: $(lib_LTLIBRARIES)
else :; fi; \
done; \
test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
}
@@ -702,8 +725,11 @@ clean-libtool:
-rm -rf .libs _libs
install-girDATA: $(gir_DATA)
@$(NORMAL_INSTALL)
- test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)"
@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(girdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(girdir)" || exit 1; \
+ fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
@@ -720,8 +746,11 @@ uninstall-girDATA:
dir='$(DESTDIR)$(girdir)'; $(am__uninstall_files_from_dir)
install-pkgconfigDATA: $(pkgconfig_DATA)
@$(NORMAL_INSTALL)
- test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
+ fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
@@ -738,8 +767,11 @@ uninstall-pkgconfigDATA:
dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
install-typelibDATA: $(typelib_DATA)
@$(NORMAL_INSTALL)
- test -z "$(typelibdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibdir)"
@list='$(typelib_DATA)'; test -n "$(typelibdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(typelibdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(typelibdir)" || exit 1; \
+ fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
@@ -756,8 +788,11 @@ uninstall-typelibDATA:
dir='$(DESTDIR)$(typelibdir)'; $(am__uninstall_files_from_dir)
install-vapiDATA: $(vapi_DATA)
@$(NORMAL_INSTALL)
- test -z "$(vapidir)" || $(MKDIR_P) "$(DESTDIR)$(vapidir)"
@list='$(vapi_DATA)'; test -n "$(vapidir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(vapidir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(vapidir)" || exit 1; \
+ fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
@@ -774,8 +809,11 @@ uninstall-vapiDATA:
dir='$(DESTDIR)$(vapidir)'; $(am__uninstall_files_from_dir)
install-libdbusmenu_gtk3includeHEADERS: $(libdbusmenu_gtk3include_HEADERS)
@$(NORMAL_INSTALL)
- test -z "$(libdbusmenu_gtk3includedir)" || $(MKDIR_P) "$(DESTDIR)$(libdbusmenu_gtk3includedir)"
@list='$(libdbusmenu_gtk3include_HEADERS)'; test -n "$(libdbusmenu_gtk3includedir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libdbusmenu_gtk3includedir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libdbusmenu_gtk3includedir)" || exit 1; \
+ fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
@@ -792,8 +830,11 @@ uninstall-libdbusmenu_gtk3includeHEADERS:
dir='$(DESTDIR)$(libdbusmenu_gtk3includedir)'; $(am__uninstall_files_from_dir)
install-libdbusmenu_gtkincludeHEADERS: $(libdbusmenu_gtkinclude_HEADERS)
@$(NORMAL_INSTALL)
- test -z "$(libdbusmenu_gtkincludedir)" || $(MKDIR_P) "$(DESTDIR)$(libdbusmenu_gtkincludedir)"
@list='$(libdbusmenu_gtkinclude_HEADERS)'; test -n "$(libdbusmenu_gtkincludedir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libdbusmenu_gtkincludedir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libdbusmenu_gtkincludedir)" || exit 1; \
+ fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
@@ -1063,12 +1104,12 @@ $(glib_enum_c): $(builddir)/$(glib_enum_h)
@HAVE_INTROSPECTION_TRUE@DbusmenuGtk$(VER)-0.4.gir: libdbusmenu-gtk$(VER).la
-@HAVE_INTROSPECTION_TRUE@@HAVE_VALA_TRUE@DbusmenuGtk$(VER)-0.4.vapi: DbusmenuGtk$(VER)-0.4.tmp.gir Makefile.am
-@HAVE_INTROSPECTION_TRUE@@HAVE_VALA_TRUE@ $(VALA_API_GEN) --library=DbusmenuGtk$(VER)-0.4 \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VALA_TRUE@dbusmenu-gtk$(VER)-0.4.vapi: DbusmenuGtk$(VER)-0.4.tmp.gir Makefile.am
+@HAVE_INTROSPECTION_TRUE@@HAVE_VALA_TRUE@ $(VALA_API_GEN) --library=dbusmenu-gtk$(VER)-0.4 \
@HAVE_INTROSPECTION_TRUE@@HAVE_VALA_TRUE@ --pkg gdk-pixbuf-2.0 \
@HAVE_INTROSPECTION_TRUE@@HAVE_VALA_TRUE@ --pkg $(GTKVALA) \
@HAVE_INTROSPECTION_TRUE@@HAVE_VALA_TRUE@ --pkg atk \
-@HAVE_INTROSPECTION_TRUE@@HAVE_VALA_TRUE@ --pkg Dbusmenu-0.4 \
+@HAVE_INTROSPECTION_TRUE@@HAVE_VALA_TRUE@ --pkg dbusmenu-glib-0.4 \
@HAVE_INTROSPECTION_TRUE@@HAVE_VALA_TRUE@ --vapidir=$(top_builddir)/libdbusmenu-glib \
@HAVE_INTROSPECTION_TRUE@@HAVE_VALA_TRUE@ $<
diff --git a/libdbusmenu-gtk/parser.c b/libdbusmenu-gtk/parser.c
index 2f7277c..419c15f 100644
--- a/libdbusmenu-gtk/parser.c
+++ b/libdbusmenu-gtk/parser.c
@@ -60,6 +60,9 @@ typedef struct _ParserData
gulong widget_accel_handler_id;
gulong widget_toggle_handler_id;
gulong widget_visible_handler_id;
+ gulong widget_screen_changed_handler_id;
+
+ gulong settings_notify_handler_id;
} ParserData;
@@ -116,6 +119,12 @@ static void widget_notify_cb (GtkWidget * widget,
static void widget_add_cb (GtkWidget * widget,
GtkWidget * child,
gpointer data);
+static void widget_screen_changed_cb (GtkWidget * widget,
+ GdkScreen * old_screen,
+ gpointer data);
+static void settings_notify_cb (GtkSettings * settings,
+ GParamSpec * pspec,
+ gpointer data);
static gboolean should_show_image (GtkImage * image);
static void menuitem_notify_cb (GtkWidget * widget,
GParamSpec * pspec,
@@ -130,6 +139,7 @@ static const char * interned_str_active = NULL;
static const char * interned_str_always_show_image = NULL;
static const char * interned_str_file = NULL;
static const char * interned_str_gicon = NULL;
+static const char * interned_str_gtk_menu_images = NULL;
static const char * interned_str_icon_name = NULL;
static const char * interned_str_icon_set = NULL;
static const char * interned_str_image = NULL;
@@ -155,6 +165,7 @@ ensure_interned_strings_loaded (void)
interned_str_always_show_image = g_intern_static_string ("always-show-image");
interned_str_file = g_intern_static_string ("file");
interned_str_gicon = g_intern_static_string ("gicon");
+ interned_str_gtk_menu_images = g_intern_static_string ("gtk-menu-images");
interned_str_icon_name = g_intern_static_string ("icon-name");
interned_str_icon_set = g_intern_static_string ("icon-set");
interned_str_image = g_intern_static_string ("image");
@@ -291,6 +302,9 @@ parser_data_free (ParserData * pdata)
dbusmenu_gtk_clear_signal_handler (o, &pdata->widget_accel_handler_id);
dbusmenu_gtk_clear_signal_handler (o, &pdata->widget_toggle_handler_id);
dbusmenu_gtk_clear_signal_handler (o, &pdata->widget_visible_handler_id);
+ dbusmenu_gtk_clear_signal_handler (o, &pdata->widget_screen_changed_handler_id);
+ dbusmenu_gtk_clear_signal_handler (gtk_widget_get_settings (GTK_WIDGET (o)),
+ &pdata->settings_notify_handler_id);
g_object_remove_weak_pointer(o, (gpointer*)&pdata->widget);
/* since the DbusmenuMenuitem is being destroyed, uncache it from the GtkWidget */
@@ -746,6 +760,10 @@ construct_dbusmenu_for_widget (GtkWidget * widget)
pdata->widget_add_handler_id = g_signal_connect (widget, "add",
G_CALLBACK (widget_add_cb), mi);
+ pdata->widget_screen_changed_handler_id = g_signal_connect (widget, "screen-changed",
+ G_CALLBACK (widget_screen_changed_cb), mi);
+ widget_screen_changed_cb (widget, NULL, mi);
+
return mi;
}
@@ -1282,6 +1300,51 @@ widget_add_cb (GtkWidget *widget,
handle_first_label (data);
}
+/* Pass NULL for pspec to update all settings at once */
+static void
+widget_screen_changed_cb (GtkWidget * widget, GdkScreen * old_screen, gpointer data)
+{
+ DbusmenuMenuitem * mi = DBUSMENU_MENUITEM(data);
+ g_return_if_fail (mi != NULL);
+
+ ParserData *pdata = (ParserData *)g_object_get_data(G_OBJECT(mi), PARSER_DATA);
+
+ if (old_screen != NULL)
+ dbusmenu_gtk_clear_signal_handler (gtk_settings_get_for_screen (old_screen),
+ &pdata->settings_notify_handler_id);
+ pdata->settings_notify_handler_id = g_signal_connect (gtk_widget_get_settings (widget), "notify",
+ G_CALLBACK (settings_notify_cb), mi);
+
+ /* And update widget now that we have a new GtkSettings */
+ settings_notify_cb (gtk_widget_get_settings (widget), NULL, mi);
+}
+
+/* Pass NULL for pspec to update all settings at once */
+static void
+settings_notify_cb (GtkSettings * settings, GParamSpec * pspec, gpointer data)
+{
+ GValue prop_value = {0};
+ DbusmenuMenuitem * mi = DBUSMENU_MENUITEM(data);
+ g_return_if_fail (mi != NULL);
+
+ ensure_interned_strings_loaded ();
+
+ if (pspec != NULL)
+ {
+ g_value_init (&prop_value, pspec->value_type);
+ g_object_get_property (G_OBJECT (settings), pspec->name, &prop_value);
+ }
+
+ if (pspec == NULL || pspec->name == interned_str_gtk_menu_images)
+ {
+ ParserData *pdata = (ParserData *)g_object_get_data(G_OBJECT(mi), PARSER_DATA);
+ update_icon (mi, pdata, GTK_IMAGE(pdata->image));
+ }
+
+ if (pspec != NULL)
+ g_value_unset (&prop_value);
+}
+
/* A child item was added to a menu we're watching. Let's try to integrate it. */
static void
item_inserted_cb (GtkContainer *menu,