Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Backports:SLE-15-SP3: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
--- data/com.canonical.unity-gtk-module.gschema.xml +++ data/com.canonical.unity-gtk-module.gschema.xml @@ -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 the ubuntu gtk patch replacement.</description> + <default>false</default> + </key> </schema> </schemalist> --- src/main.c +++ src/main.c @@ -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_CHECK_VERSION (3, 0, 0) 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