summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Koegel <eric.koegel@gmail.com>2015-03-26 14:18:27 +0300
committerEric Koegel <eric.koegel@gmail.com>2015-03-26 14:18:27 +0300
commit4f746d15a648984bfe7fffe81a988a4c834b59d8 (patch)
tree64da3ed4c4b1412462a130512c070ba553fc1fba
parent6c09daff2c3a9ea601c8984319c64a05a3ba2fb4 (diff)
downloadgarcon-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--.gitignore21
-rw-r--r--configure.ac.in4
-rw-r--r--garcon-gtk/Makefile.am47
-rw-r--r--garcon-gtk/garcon-gtk-menu.c74
-rw-r--r--garcon-gtk/garcon-gtk3-1.pc.in13
-rw-r--r--garcon/Makefile.am37
-rw-r--r--garcon/garcon-2.pc.in13
7 files changed, 185 insertions, 24 deletions
diff --git a/.gitignore b/.gitignore
index 7d2e52b..5a365c7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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}