diff options
author | Anarky | 2018-07-13 09:11:50 +0200 |
---|---|---|
committer | Anarky | 2018-07-13 09:11:50 +0200 |
commit | 72ec731d240a40cfa28d1b07b0e47a40c504f8ba (patch) | |
tree | 934ca2f2cd759d7d8db1dbdbff55b348d3763fe2 | |
download | aur-72ec731d240a40cfa28d1b07b0e47a40c504f8ba.tar.gz |
gtk2-libwinmenu: import from AUR Archive, fix PKGBUILD, change key, fix gimp
-rw-r--r-- | .SRCINFO | 21 | ||||
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | PKGBUILD | 31 | ||||
-rw-r--r-- | fix_gimp_whitelist.patch | 11 | ||||
-rw-r--r-- | libwinmenu.c | 84 | ||||
-rw-r--r-- | libwinmenu.install | 6 | ||||
-rw-r--r-- | use_alt_left.patch | 12 |
7 files changed, 167 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..0543fd706e65 --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,21 @@ +pkgbase = gtk2-libwinmenu + pkgdesc = Gtk+ module to hide menubar by default + pkgver = 1 + pkgrel = 1 + url = http://www.linux.org.ru/jump-message.jsp?msgid=5606544&cid=5617512 + install = libwinmenu.install + arch = i686 + arch = x86_64 + license = custom + depends = gtk2 + source = libwinmenu.c + source = Makefile + source = use_alt_left.patch + source = fix_gimp_whitelist.patch + md5sums = 20a2e4823e8d2baf1e33de97335a040b + md5sums = f90fd2c86b796a0c9d9e4a646539ec31 + md5sums = d43683a6001d8032881f95ccf8dda5f4 + md5sums = 9ed28c17363baffb317566877f7c8315 + +pkgname = gtk2-libwinmenu + diff --git a/Makefile b/Makefile new file mode 100644 index 000000000000..d1fe60799e9c --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +all: + gcc -shared -fPIC `pkg-config gtk+-x11-2.0 --cflags --libs` -o libwinmenu.so libwinmenu.c diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..f689f7702474 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=gtk2-libwinmenu +pkgver=1 +pkgrel=1 +pkgdesc="Gtk+ module to hide menubar by default" +arch=('i686' 'x86_64') +url='http://www.linux.org.ru/jump-message.jsp?msgid=5606544&cid=5617512' +license=('custom') +depends=('gtk2') +source=('libwinmenu.c' 'Makefile' + use_alt_left.patch + fix_gimp_whitelist.patch) +md5sums=('20a2e4823e8d2baf1e33de97335a040b' 'f90fd2c86b796a0c9d9e4a646539ec31' + d43683a6001d8032881f95ccf8dda5f4 + 9ed28c17363baffb317566877f7c8315) +install='libwinmenu.install' + +prepare() { + cd "$srcdir" + patch -Np1 --follow-symlinks -i use_alt_left.patch + patch -Np1 --follow-symlinks -i fix_gimp_whitelist.patch +} + +build() { + cd "$srcdir" + make +} + +package() { + cd "$srcdir" + install -Dm755 libwinmenu.so "$pkgdir/usr/lib/gtk-2.0/modules/libwinmenu.so" +} diff --git a/fix_gimp_whitelist.patch b/fix_gimp_whitelist.patch new file mode 100644 index 000000000000..253700ab1f9f --- /dev/null +++ b/fix_gimp_whitelist.patch @@ -0,0 +1,11 @@ +--- a/libwinmenu.c ++++ b/libwinmenu.c +@@ -53,7 +53,7 @@ + { + GtkWidget *fc; + GObjectClass *klass; +- const gchar *app_whitelist = "gnome-terminal, gimp, mousepad"; ++ const gchar *app_whitelist = "gnome-terminal, gimp-2.10, mousepad"; + + if (strstr (app_whitelist, g_get_prgname()) != NULL) + return; diff --git a/libwinmenu.c b/libwinmenu.c new file mode 100644 index 000000000000..0cc2ae065775 --- /dev/null +++ b/libwinmenu.c @@ -0,0 +1,84 @@ +/* + * gcc -shared `pkg-config gtk+-x11-2.0 --cflags --libs` -o libwinmenu.so main.c + * */ + +#include <gtk/gtk.h> +#include <gdk/gdkkeysyms.h> + +#define _gtk_marshal_VOID__VOID g_cclosure_marshal_VOID__VOID +#define _gtk_marshal_NONE__NONE _gtk_marshal_VOID__VOID + +static GObject* (*old_gtk_menu_bar_constructor)(GType type, guint n_construct_properties, GObjectConstructParam *construct_params) = NULL; +static GObject* (*old_gtk_window_constructor)(GType type, guint n_construct_properties, GObjectConstructParam *construct_params) = NULL; +static void (*old_widget_show) (GtkWidget * widget) = NULL; + +static void toggle_menu_bar (GtkWidget *widget, gpointer user_data) +{ + GtkWidget * wdg = GTK_WIDGET(user_data); + GTK_WIDGET_GET_CLASS(wdg)->show = old_widget_show; + if (GTK_WIDGET_VISIBLE(wdg)) + gtk_widget_hide(wdg); + else + gtk_widget_show(wdg); +} + +static void anchor_event (GtkWidget *widget, GtkWidget *previous_toplevel, gpointer user_data) +{ + GtkWidget *toplevel = gtk_widget_get_toplevel (widget); + if (GTK_WIDGET_TOPLEVEL (toplevel)) { + if (previous_toplevel) + g_signal_handlers_disconnect_by_func(previous_toplevel, G_CALLBACK(toggle_menu_bar), widget); + g_signal_connect (toplevel, "toggle-menu-bar", G_CALLBACK(toggle_menu_bar), widget); + } +} + +static void show (GtkWidget *widget) +{ + if (GTK_IS_MENU_BAR(widget)) + return; + old_widget_show(widget); +} + +GObject* new_gtk_menu_bar_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_params) +{ + GObject * ret = old_gtk_menu_bar_constructor(type,n_construct_properties,construct_params); + g_signal_connect (ret, "hierarchy-changed", G_CALLBACK(anchor_event), NULL); + g_signal_connect (ret, "can_activate_accel", G_CALLBACK(gtk_true), NULL); + + return ret; +} + +G_MODULE_EXPORT void +gtk_module_init (gint * argc, gchar *** argv) +{ + GtkWidget *fc; + GObjectClass *klass; + const gchar *app_whitelist = "gnome-terminal, gimp, mousepad"; + + if (strstr (app_whitelist, g_get_prgname()) != NULL) + return; + + g_signal_new ("toggle-menu-bar", + GTK_TYPE_WINDOW, + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + 0, + NULL, NULL, + _gtk_marshal_VOID__VOID, + G_TYPE_NONE, + 0); + + fc = gtk_menu_bar_new(); + klass = GTK_MENU_BAR_GET_CLASS(fc); + old_gtk_menu_bar_constructor = klass->constructor; + klass->constructor = new_gtk_menu_bar_constructor; + old_widget_show = GTK_WIDGET_CLASS(klass)->show; + GTK_WIDGET_CLASS(klass)->show = show; + + fc = gtk_window_new(GTK_WINDOW_TOPLEVEL); + klass = GTK_WINDOW_GET_CLASS(fc); + + gtk_binding_entry_add_signal (gtk_binding_set_by_class (klass), GDK_m, GDK_CONTROL_MASK, + "toggle-menu-bar", 0); + gtk_binding_entry_add_signal (gtk_binding_set_by_class (klass), GDK_m, GDK_MOD1_MASK, + "toggle-menu-bar", 0); +} diff --git a/libwinmenu.install b/libwinmenu.install new file mode 100644 index 000000000000..a488da1d6d99 --- /dev/null +++ b/libwinmenu.install @@ -0,0 +1,6 @@ +post_install() { + echo "Set the following environment variable for changes to take place" + echo "GTK_MODULES=winmenu" + echo "----------------------------------------------------------------" + echo "Menu is toggled with Alt" +} diff --git a/use_alt_left.patch b/use_alt_left.patch new file mode 100644 index 000000000000..47a6d3f4c6d7 --- /dev/null +++ b/use_alt_left.patch @@ -0,0 +1,12 @@ +--- a/libwinmenu.c ++++ b/libwinmenu.c +@@ -77,8 +77,6 @@ gtk_module_init (gint * argc, gchar *** argv) + fc = gtk_window_new(GTK_WINDOW_TOPLEVEL); + klass = GTK_WINDOW_GET_CLASS(fc); + +- gtk_binding_entry_add_signal (gtk_binding_set_by_class (klass), GDK_m, GDK_CONTROL_MASK, +- "toggle-menu-bar", 0); +- gtk_binding_entry_add_signal (gtk_binding_set_by_class (klass), GDK_m, GDK_MOD1_MASK, ++ gtk_binding_entry_add_signal (gtk_binding_set_by_class (klass), GDK_Alt_L, 0, + "toggle-menu-bar", 0); + } |