File unity-gtk-module-gsettings.patch of Package unity-gtk-module

=== modified file 'data/com.canonical.unity-gtk-module.gschema.xml'
--- data/com.canonical.unity-gtk-module.gschema.xml	2013-11-14 18:51:01 +0000
+++ data/com.canonical.unity-gtk-module.gschema.xml	2015-04-03 16:28:11 +0000
@@ -11,5 +11,10 @@
       <description>List of applications where unity-gtk-module should be enabled.</description>
       <default>[]</default>
     </key>
+    <key name="gtk2-shell-shows-menubar" type="b">
+      <summary>Determines GTK2 menus behaviour</summary>
+      <description>This key is ubuntu gtk patch replacement.</description>
+      <default>true</default>
+    </key>
   </schema>
 </schemalist>

=== modified file 'src/main.c'
--- src/main.c	2014-06-09 03:50:16 +0000
+++ src/main.c	2015-04-03 16:46:46 +0000
@@ -43,6 +43,7 @@
 #define UNITY_GTK_MODULE_SCHEMA "com.canonical.unity-gtk-module"
 #define BLACKLIST_KEY           "blacklist"
 #define WHITELIST_KEY           "whitelist"
+#define SHELL_SHOWS_MENUBAR_KEY "gtk2-shell-shows-menubar"
 
 #define _GTK_UNIQUE_BUS_NAME     "_GTK_UNIQUE_BUS_NAME"
 #define _UNITY_OBJECT_PATH       "_UNITY_OBJECT_PATH"
@@ -513,6 +514,7 @@
     }
 }
 
+#if GTK_MAJOR_VERSION == 3
 static gboolean
 gtk_widget_shell_shows_menubar (GtkWidget *widget)
 {
@@ -543,6 +545,28 @@
 {
   gtk_widget_queue_resize (user_data);
 }
+#else
+static void
+g_settings_handle_gtk_shell_shows_menubar (GSettings    *settings,
+                                           gchar *key,
+                                           gpointer    user_data)
+{
+  gtk_widget_queue_resize (user_data);
+}
+
+static gboolean
+gtk_widget_shell_shows_menubar (GtkWidget *widget)
+{
+  GSettings* settings = G_SETTINGS(g_object_get_data(G_OBJECT(widget),UNITY_GTK_MODULE_SCHEMA));
+  if (settings == NULL)
+    {
+      settings = g_settings_new(UNITY_GTK_MODULE_SCHEMA);
+      g_object_set_data_full(G_OBJECT(widget),UNITY_GTK_MODULE_SCHEMA,(gpointer)settings,(GDestroyNotify)g_object_unref);
+      g_signal_connect (settings, "changed::"SHELL_SHOWS_MENUBAR_KEY, G_CALLBACK (g_settings_handle_gtk_shell_shows_menubar), widget);
+    }
+  return g_settings_get_boolean (settings,SHELL_SHOWS_MENUBAR_KEY);
+}
+#endif
 
 static void
 hijacked_window_realize (GtkWidget *widget)
@@ -580,7 +604,6 @@
 
   gtk_window_get_window_data (GTK_WINDOW (widget));
 }
-#endif
 
 static void
 hijacked_menu_bar_realize (GtkWidget *widget)
@@ -622,6 +645,56 @@
   if (pre_hijacked_menu_bar_unrealize != NULL)
     (* pre_hijacked_menu_bar_unrealize) (widget);
 }
+#else
+static void
+hijacked_menu_bar_realize (GtkWidget *widget)
+{
+  GtkWidget *window;
+  GSettings* settings;
+
+  g_return_if_fail (GTK_IS_MENU_BAR (widget));
+
+  settings = G_SETTINGS(g_object_get_data(G_OBJECT(widget),UNITY_GTK_MODULE_SCHEMA));
+  if (settings == NULL)
+    {
+      settings = g_settings_new(UNITY_GTK_MODULE_SCHEMA);
+      g_object_set_data_full(G_OBJECT(widget),UNITY_GTK_MODULE_SCHEMA,(gpointer)settings,(GDestroyNotify)g_object_unref);
+      g_signal_connect (settings, "changed::"SHELL_SHOWS_MENUBAR_KEY, G_CALLBACK (g_settings_handle_gtk_shell_shows_menubar), widget);
+    }
+
+  if (pre_hijacked_menu_bar_realize != NULL)
+    (* pre_hijacked_menu_bar_realize) (widget);
+
+  window = gtk_widget_get_toplevel (widget);
+
+  if (GTK_IS_WINDOW (window))
+    gtk_window_connect_menu_shell (GTK_WINDOW (window), GTK_MENU_SHELL (widget));
+}
+
+static void
+hijacked_menu_bar_unrealize (GtkWidget *widget)
+{
+  GSettings *settings;
+  MenuShellData *menu_shell_data;
+
+  g_return_if_fail (GTK_IS_MENU_BAR (widget));
+
+  settings = G_SETTINGS(g_object_get_data (G_OBJECT(widget),UNITY_GTK_MODULE_SCHEMA));
+  menu_shell_data = gtk_menu_shell_get_menu_shell_data (GTK_MENU_SHELL (widget));
+
+  if (settings != NULL)
+    {
+      g_signal_handlers_disconnect_by_data (settings, widget);
+      g_object_set_data(G_OBJECT(widget),UNITY_GTK_MODULE_SCHEMA,NULL);
+    }
+
+  if (menu_shell_data->window != NULL)
+    gtk_window_disconnect_menu_shell (menu_shell_data->window, GTK_MENU_SHELL (widget));
+
+  if (pre_hijacked_menu_bar_unrealize != NULL)
+    (* pre_hijacked_menu_bar_unrealize) (widget);
+}
+#endif
 
 static void
 hijacked_menu_bar_size_allocate (GtkWidget     *widget,

openSUSE Build Service is sponsored by