Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.3:Update
unity-gtk-module
unity-gtk-module-gsettings.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
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,
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor