diff options
author | Eric Koegel <eric.koegel@gmail.com> | 2015-03-26 14:18:27 +0300 |
---|---|---|
committer | Eric Koegel <eric.koegel@gmail.com> | 2015-03-26 14:18:27 +0300 |
commit | 4f746d15a648984bfe7fffe81a988a4c834b59d8 (patch) | |
tree | 64da3ed4c4b1412462a130512c070ba553fc1fba | |
parent | 6c09daff2c3a9ea601c8984319c64a05a3ba2fb4 (diff) | |
download | garcon-4f746d15a648984bfe7fffe81a988a4c834b59d8.tar.gz |
Port Garcon to Gtk3
This adds Gtk3 support. Currently, both Gtk2 and Gtk3 are built
at the same time until the consumers of Garcon have all been
ported over. It uses the same codebase for both to assist with
troubleshooting issues. Note, this means the GtkImageMenuItems
are now an image + label packed into a box, so the padding
increased slightly.
-rw-r--r-- | .gitignore | 21 | ||||
-rw-r--r-- | configure.ac.in | 4 | ||||
-rw-r--r-- | garcon-gtk/Makefile.am | 47 | ||||
-rw-r--r-- | garcon-gtk/garcon-gtk-menu.c | 74 | ||||
-rw-r--r-- | garcon-gtk/garcon-gtk3-1.pc.in | 13 | ||||
-rw-r--r-- | garcon/Makefile.am | 37 | ||||
-rw-r--r-- | garcon/garcon-2.pc.in | 13 |
7 files changed, 185 insertions, 24 deletions
@@ -55,3 +55,24 @@ depcomp garcon-1.pc garcon-config.h POTFILES +data/xfce/xfce-accessories.directory +data/xfce/xfce-development.directory +data/xfce/xfce-education.directory +data/xfce/xfce-games.directory +data/xfce/xfce-graphics.directory +data/xfce/xfce-hardware.directory +data/xfce/xfce-multimedia.directory +data/xfce/xfce-network.directory +data/xfce/xfce-office.directory +data/xfce/xfce-other.directory +data/xfce/xfce-personal.directory +data/xfce/xfce-screensavers.directory +data/xfce/xfce-settings.directory +data/xfce/xfce-system.directory +garcon-gtk/garcon-gtk2-1.pc +garcon-gtk/garcon-gtk3-1.pc +garcon/garcon-2.pc +garcon/garcon-marshal.c +garcon/garcon-marshal.h +gtk-doc.m4 +tests/test-display-menu diff --git a/configure.ac.in b/configure.ac.in index e8cf2f6..ef8ecbc 100644 --- a/configure.ac.in +++ b/configure.ac.in @@ -125,6 +125,8 @@ XDT_CHECK_PACKAGE([GOBJECT], [gobject-2.0], [2.30.0]) XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [2.30.0]) XDT_CHECK_PACKAGE([GTK2], [gtk+-2.0], [2.24.0]) XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1], [4.10.0]) +XDT_CHECK_PACKAGE([GTK3], [gtk+-3.0], [3.14.0]) +XDT_CHECK_PACKAGE([LIBXFCE4UI2], [libxfce4ui-2], [4.11.1]) dnl ************************* dnl *** Check for gtk-doc *** @@ -150,9 +152,11 @@ docs/reference/Makefile docs/reference/version.xml garcon/Makefile garcon/garcon-1.pc +garcon/garcon-2.pc garcon/garcon-config.h garcon-gtk/Makefile garcon-gtk/garcon-gtk2-1.pc +garcon-gtk/garcon-gtk3-1.pc po/Makefile.in tests/Makefile ]) diff --git a/garcon-gtk/Makefile.am b/garcon-gtk/Makefile.am index 43fa9d2..1f5d9b6 100644 --- a/garcon-gtk/Makefile.am +++ b/garcon-gtk/Makefile.am @@ -26,7 +26,8 @@ AM_CPPFLAGS = \ $(PLATFORM_CFLAGS) lib_LTLIBRARIES = \ - libgarcon-gtk2-1.la + libgarcon-gtk2-1.la \ + libgarcon-gtk3-1.la libgarcon_gtk_headers = \ garcon-gtk.h \ @@ -75,8 +76,50 @@ libgarcon_gtk2_1_la_LIBADD = \ libgarcon_gtk2_DEPENDENCIES = \ $(top_builddir)/garcon/libgarcon-$(GARCON_VERSION_API).la + +libgarcon_gtk3includedir = \ + $(includedir)/garcon-gtk2-1/garcon-gtk + +libgarcon_gtk3include_HEADERS = \ + $(libgarcon_gtk_headers) + +libgarcon_gtk3_1_la_SOURCES = \ + $(libgarcon_gtk_sources) \ + $(libgarcon_gtk_headers) + +libgarcon_gtk3_1_la_CFLAGS = \ + $(GIO_CFLAGS) \ + $(GLIB_CFLAGS) \ + $(GTK3_CFLAGS) \ + $(LIBXFCE4UTIL_CFLAGS) \ + $(GOBJECT_CFLAGS) \ + $(GTHREAD_CFLAGS) \ + $(LIBXFCE4UI2_CFLAGS) \ + $(PLATFORM_CFLAGS) + +libgarcon_gtk3_1_la_LDFLAGS = \ + -no-undefined \ + -export-dynamic \ + -version-info $(GARCON_VERINFO) \ + -export-symbols-regex "^[^_].*" \ + $(PLATFORM_LDFLAGS) + +libgarcon_gtk3_1_la_LIBADD = \ + $(top_builddir)/garcon/libgarcon-$(GARCON_VERSION_API).la \ + $(GIO_LIBS) \ + $(GLIB_LIBS) \ + $(GTK3_LIBS) \ + $(LIBXFCE4UTIL_LIBS) \ + $(GOBJECT_LIBS) \ + $(GTHREAD_LIBS) \ + $(LIBXFCE4UI2_LIBS) + +libgarcon_gtk3_DEPENDENCIES = \ + $(top_builddir)/garcon/libgarcon-$(GARCON_VERSION_API).la + + pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = garcon-gtk2-1.pc +pkgconfig_DATA = garcon-gtk2-1.pc garcon-gtk3-1.pc # Required for gtk-doc and make distcheck dist-hook: all diff --git a/garcon-gtk/garcon-gtk-menu.c b/garcon-gtk/garcon-gtk-menu.c index 21b5ec4..57d188f 100644 --- a/garcon-gtk/garcon-gtk-menu.c +++ b/garcon-gtk/garcon-gtk-menu.c @@ -586,6 +586,8 @@ garcon_gtk_menu_add (GarconGtkMenu *menu, if (GARCON_IS_MENU_ITEM (li->data)) { + GtkWidget *box, *label; + /* watch for changes */ g_signal_connect_swapped (G_OBJECT (li->data), "changed", G_CALLBACK (garcon_gtk_menu_reload), menu); @@ -605,7 +607,34 @@ garcon_gtk_menu_add (GarconGtkMenu *menu, continue; /* create item */ - mi = gtk_image_menu_item_new_with_label (name); + mi = gtk_menu_item_new (); + label = gtk_label_new (name); +#if GTK_CHECK_VERSION (3, 0, 0) + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); +#else + box = gtk_hbox_new (FALSE, 0); +#endif + + if (menu->priv->show_menu_icons) + { + icon_name = garcon_menu_item_get_icon_name (li->data); + if (STR_IS_EMPTY (icon_name)) + icon_name = "applications-other"; + + image = garcon_gtk_menu_load_icon (icon_name); + gtk_widget_show (image); + } + else + { + image = gtk_image_new (); + } + + /* Add the image and label to the box, add the box to the menu item */ + gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0); + gtk_widget_show_all (box); + gtk_container_add (GTK_CONTAINER (mi), box); + gtk_menu_shell_append (GTK_MENU_SHELL (gtk_menu), mi); g_signal_connect (G_OBJECT (mi), "activate", G_CALLBACK (garcon_gtk_menu_item_activate), li->data); @@ -633,17 +662,6 @@ garcon_gtk_menu_add (GarconGtkMenu *menu, if (STR_IS_EMPTY (command)) gtk_widget_set_sensitive (mi, FALSE); - if (menu->priv->show_menu_icons) - { - icon_name = garcon_menu_item_get_icon_name (li->data); - if (STR_IS_EMPTY (icon_name)) - icon_name = "applications-other"; - - image = garcon_gtk_menu_load_icon (icon_name); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), image); - gtk_widget_show (image); - } - /* atleast 1 visible child */ has_children = TRUE; } @@ -667,14 +685,17 @@ garcon_gtk_menu_add (GarconGtkMenu *menu, submenu = gtk_menu_new (); if (garcon_gtk_menu_add (menu, GTK_MENU (submenu), li->data)) { + GtkWidget *box, *label; + /* attach submenu */ name = garcon_menu_element_get_name (li->data); - mi = gtk_image_menu_item_new_with_label (name); - gtk_menu_shell_append (GTK_MENU_SHELL (gtk_menu), mi); - gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), submenu); - g_signal_connect (G_OBJECT (submenu), "selection-done", - G_CALLBACK (garcon_gtk_menu_deactivate), menu); - gtk_widget_show (mi); + mi = gtk_menu_item_new (); + label = gtk_label_new (name); +#if GTK_CHECK_VERSION (3, 0, 0) + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); +#else + box = gtk_hbox_new (FALSE, 0); +#endif if (menu->priv->show_menu_icons) { @@ -683,9 +704,24 @@ garcon_gtk_menu_add (GarconGtkMenu *menu, icon_name = "applications-other"; image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), image); gtk_widget_show (image); } + else + { + image = gtk_image_new (); + } + + /* Add the image and label to the box, add the box to the menu item */ + gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0); + gtk_widget_show_all (box); + gtk_container_add (GTK_CONTAINER (mi), box); + + gtk_menu_shell_append (GTK_MENU_SHELL (gtk_menu), mi); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), submenu); + g_signal_connect (G_OBJECT (submenu), "selection-done", + G_CALLBACK (garcon_gtk_menu_deactivate), menu); + gtk_widget_show (mi); } else { diff --git a/garcon-gtk/garcon-gtk3-1.pc.in b/garcon-gtk/garcon-gtk3-1.pc.in new file mode 100644 index 0000000..33d3b3b --- /dev/null +++ b/garcon-gtk/garcon-gtk3-1.pc.in @@ -0,0 +1,13 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +garcon_api_version=@GARCON_VERSION_API@ + +Name: @PACKAGE_TARNAME@ +Description: Freedesktop.org compliant menu library +Requires: garcon-2 gtk+-3.0 libxfce4ui-2 +Version: @PACKAGE_VERSION@ +Libs: -L${libdir} -lgarcon-gtk3-${garcon_api_version} +Cflags: -I${includedir}/garcon-gtk3-${garcon_api_version} diff --git a/garcon/Makefile.am b/garcon/Makefile.am index 6ead847..c9941b1 100644 --- a/garcon/Makefile.am +++ b/garcon/Makefile.am @@ -26,7 +26,8 @@ AM_CPPFLAGS = \ $(PLATFORM_CFLAGS) lib_LTLIBRARIES = \ - libgarcon-1.la + libgarcon-1.la \ + libgarcon-2.la libgarcon_built_public_sources = \ garcon-marshal.h @@ -93,7 +94,7 @@ libgarcon_1_la_LDFLAGS = \ -version-info $(GARCON_VERINFO) \ -export-symbols-regex "^[^_].*" \ $(PLATFORM_LDFLAGS) - + libgarcon_1_la_LIBADD = \ $(GIO_LIBS) \ $(GLIB_LIBS) \ @@ -101,12 +102,42 @@ libgarcon_1_la_LIBADD = \ $(GOBJECT_LIBS) \ $(GTHREAD_LIBS) +libgarcon2_includedir = $(includedir)/garcon-2/garcon + +libgarcon2_include_HEADERS = $(libgarcon_headers) + +libgarcon_2_la_SOURCES = \ + $(libgarcon_sources) \ + $(libgarcon_headers) + +libgarcon_2_la_CFLAGS = \ + $(GIO_CFLAGS) \ + $(GLIB_CFLAGS) \ + $(LIBXFCE4UTIL_CFLAGS) \ + $(GOBJECT_CFLAGS) \ + $(GTHREAD_CFLAGS) \ + $(PLATFORM_CFLAGS) + +libgarcon_2_la_LDFLAGS = \ + -no-undefined \ + -export-dynamic \ + -version-info $(GARCON_VERINFO) \ + -export-symbols-regex "^[^_].*" \ + $(PLATFORM_LDFLAGS) + +libgarcon_2_la_LIBADD = \ + $(GIO_LIBS) \ + $(GLIB_LIBS) \ + $(LIBXFCE4UTIL_LIBS) \ + $(GOBJECT_LIBS) \ + $(GTHREAD_LIBS) + EXTRA_DIST = \ garcon-config.h.in \ garcon-marshal.list pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = garcon-1.pc +pkgconfig_DATA = garcon-1.pc garcon-2.pc DISTCLEANFILES = \ stamp-garcon-marshal.h \ diff --git a/garcon/garcon-2.pc.in b/garcon/garcon-2.pc.in new file mode 100644 index 0000000..10e4356 --- /dev/null +++ b/garcon/garcon-2.pc.in @@ -0,0 +1,13 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +garcon_api_version=@GARCON_VERSION_API@ + +Name: @PACKAGE_TARNAME@ +Description: Freedesktop.org compliant menu library +Requires: glib-2.0 gio-2.0 gthread-2.0 gobject-2.0 +Version: @PACKAGE_VERSION@ +Libs: -L${libdir} -lgarcon-${garcon_api_version} +Cflags: -I${includedir}/garcon-${garcon_api_version} |