[mate-dock-applet] 01/02: debian/patches: Drop 0000_listen_to_keypress_events_from_other_windows.patch. Applied upstream.

Martin Wimpress flexiondotorg-guest at moszumanska.debian.org
Fri Jun 23 11:56:55 UTC 2017


This is an automated email from the git hooks/post-receive script.

flexiondotorg-guest pushed a commit to branch ubuntu/artful
in repository mate-dock-applet.

commit b1065b1c3b205d2c997f39c9f57926297e085947
Author: Martin Wimpress <martin.wimpress at ubuntu.com>
Date:   Fri Jun 23 12:40:24 2017 +0100

    debian/patches: Drop 0000_listen_to_keypress_events_from_other_windows.patch. Applied upstream.
---
 ...ten_to_keypress_events_from_other_windows.patch | 227 ---------------------
 debian/patches/series                              |   1 -
 2 files changed, 228 deletions(-)

diff --git a/debian/patches/0000_listen_to_keypress_events_from_other_windows.patch b/debian/patches/0000_listen_to_keypress_events_from_other_windows.patch
deleted file mode 100644
index 3173609..0000000
--- a/debian/patches/0000_listen_to_keypress_events_from_other_windows.patch
+++ /dev/null
@@ -1,227 +0,0 @@
-From bb8337b9d1c59730e6ddd564f70c7d046f290dcd Mon Sep 17 00:00:00 2001
-From: Victor Kareh <vkareh at vkareh.net>
-Date: Fri, 16 Jun 2017 15:01:36 -0400
-Subject: [PATCH] Listen to key press events from other windows
-
-This fixes #91 where `<Super>+1/2/3/etc` keybindings are swallowed if
-a different application has global keybindings mapped to `<Super_L>`.
----
- README.md          |   2 +-
- src/dock_applet.in | 128 ++++++++++++++++++++++++++++++++++++++++++-----------
- 2 files changed, 102 insertions(+), 28 deletions(-)
-
-diff --git a/README.md b/README.md
-index 4e64b7c..0dd95d7 100644
---- a/README.md
-+++ b/README.md
-@@ -47,7 +47,7 @@ Users of other distros will need to install from source, so first install the re
- 
- * Python3
- * Python wnck bindings (gir1.2-wnck-1.0 for Gtk2 versions of the applet, gir1.2-wnck-3.0 for Gtk3)
--* Python bindings to the keybinder library (gir1.2-keybinder-0.0 for Gtk2, gir1.2-keybinder-3.0 for Gtk3)
-+* Python implementation of Xlib (python-xlib)
- * GLib development files (libglib2.0-dev) 
- * Python Imaging Library (python3-pil)
- * Python 3 Cairo bindings (python3-cairo)
-diff --git a/src/dock_applet.in b/src/dock_applet.in
-index 3e8b6fa..ef5aa79 100755
---- a/src/dock_applet.in
-+++ b/src/dock_applet.in
-@@ -40,24 +40,25 @@ import gi
- if build_gtk2:
-     gi.require_version("Gtk", "2.0")
-     gi.require_version("Wnck", "1.0")
--    gi.require_version("Keybinder", "0.0")
- else:
-     gi.require_version("Gtk", "3.0")
-     gi.require_version("Wnck", "3.0")
--    gi.require_version("Keybinder", "3.0")
- 
- gi.require_version("MatePanelApplet", "4.0")
- 
- import os
- import sys
-+import threading
- sys.path.insert(1, '@pythondir@')
- 
-+from Xlib.display import Display
-+from Xlib import X, error
- from gi.repository import Gtk
- from gi.repository import MatePanelApplet
- from gi.repository import Gdk
--from gi.repository import Keybinder
- from gi.repository import Gio
- from gi.repository import GObject
-+from gi.repository import GLib
- from gi.repository import Wnck
- 
- import xdg.DesktopEntry as DesktopEntry
-@@ -79,13 +80,6 @@ keyb_shortcuts = ["<Super>1", "<Super>2", "<Super>3", "<Super>4", "<Super>5",
-                   "<Super><Alt>1", "<Super><Alt>2", "<Super><Alt>3", "<Super><Alt>4", "<Super><Alt>5",
-                   "<Super><Alt>6", "<Super><Alt>7", "<Super><Alt>8", "<Super><Alt>9", "<Super><Alt>0"]
- 
--# additional shortcuts for the number pad - definitely don't work on my UK keyboards but included
--# anyway in case they work for other layouts
--keyb_shortcuts1 = ["<Super>KP_1", "<Super>KP_2", "<Super>KP_3", "<Super>KP_4", "<Super>KP_5",
--                  "<Super>KP_6", "<Super>KP_7", "<Super>KP_8", "<Super>KP_9", "<Super>KP_0",
--                  "<Super><Alt>KP_1", "<Super><Alt>KP_2", "<Super><Alt>KP_3", "<Super><Alt>KP_4", "<Super><Alt>KP_5",
--                  "<Super><Alt>KP_6", "<Super><Alt>KP_7", "<Super><Alt>KP_8", "<Super><Alt>KP_9", "<Super><Alt>KP_0"]
--
- 
- def applet_button_press(widget, event, the_dock):
-     """Button press event for the applet
-@@ -500,23 +494,19 @@ def applet_drag_motion(widget, context, x, y, time, the_dock):
-     return True
- 
- 
--def applet_shortcut_handler(keystring, the_dock):
-+def applet_shortcut_handler(keybinder, the_dock):
-     """ Handler for global keyboard shortcut presses
- 
-     Start the app if it isn't already running
- 
-     If it is already runnning cycle through its windows ...
- 
--    :param keystring: the keystring which was pressed e.g. "<Super>4"
-+    :param keybinder: the keybinder object with the keystring which was pressed e.g. "<Super>4"
-     :param the_dock: the dock...
-     """
-     # get the position in the dock of the app we need to activate
--    if keystring in keyb_shortcuts:
--        app_no = keyb_shortcuts.index(keystring)
--    else:
--        # now look in the number pad shortcurts
--        print("looking in number pad shortcuts")
--        app_no = keyb_shortcuts1.index(keystring)
-+    if keybinder.current_shortcut in keybinder.shortcuts:
-+        app_no = keybinder.shortcuts.index(keybinder.current_shortcut)
- 
-     app = the_dock.get_app_by_pos(app_no)
-     if app is not None:
-@@ -549,9 +539,6 @@ def applet_fill(applet):
- 
-     os.chdir(os.path.expanduser("~"))
- 
--    # allow us to set our keyboard shortcuts...
--    Keybinder.init()
--
-     applet.set_events(applet.get_events() | Gdk.EventMask.BUTTON_PRESS_MASK
-                                           | Gdk.EventMask.BUTTON_RELEASE_MASK
-                                           | Gdk.EventMask.POINTER_MOTION_MASK
-@@ -603,16 +590,14 @@ def applet_fill(applet):
-         applet.connect("drag-data-received", applet_drag_data_received, the_dock)
- 
-     # set up keyboard shortcuts used to activate apps in the dock
-+    keybinder = GlobalKeyBinding()
-     for shortcut in keyb_shortcuts:
--        if not Keybinder.bind(shortcut, applet_shortcut_handler, the_dock):
--            log_it("could not bind shortcut %s" % shortcut)
--    for shortcut in keyb_shortcuts1:
--        if not Keybinder.bind(shortcut, applet_shortcut_handler, the_dock):
--            log_it("could not bind shortcut %s" % shortcut)
-+        keybinder.grab(shortcut)
-+    keybinder.connect("activate", applet_shortcut_handler, the_dock)
-+    keybinder.start()
- 
-     applet.set_background_widget(applet)  # hack for panel transparency
- 
--
- def applet_factory(applet, iid, data):
-     """Factory routine called when an applet needs to be created
- 
-@@ -634,6 +619,95 @@ def applet_factory(applet, iid, data):
-     return True
- 
- 
-+class GlobalKeyBinding(GObject.GObject, threading.Thread):
-+    __gsignals__ = {
-+        'activate': (GObject.SignalFlags.RUN_LAST, None, ()),
-+    }
-+
-+    def __init__(self):
-+        GObject.GObject.__init__(self)
-+        threading.Thread.__init__(self)
-+        self.setDaemon(True)
-+
-+        self.display = Display()
-+        self.screen = self.display.screen()
-+        self.window = self.screen.root
-+        self.keymap = Gdk.Keymap().get_default()
-+        self.ignored_masks = self.get_mask_combinations(X.LockMask | X.Mod2Mask | X.Mod5Mask)
-+        self.map_modifiers()
-+        self.shortcuts = []
-+
-+    def get_mask_combinations(self, mask):
-+        return [x for x in range(mask+1) if not (x & ~mask)]
-+
-+    def map_modifiers(self):
-+        gdk_modifiers = (Gdk.ModifierType.CONTROL_MASK, Gdk.ModifierType.SHIFT_MASK, Gdk.ModifierType.MOD1_MASK,
-+                         Gdk.ModifierType.MOD2_MASK, Gdk.ModifierType.MOD3_MASK, Gdk.ModifierType.MOD4_MASK, Gdk.ModifierType.MOD5_MASK,
-+                         Gdk.ModifierType.SUPER_MASK, Gdk.ModifierType.HYPER_MASK)
-+        self.known_modifiers_mask = 0
-+        for modifier in gdk_modifiers:
-+            if "Mod" not in Gtk.accelerator_name(0, modifier) or "Mod4" in Gtk.accelerator_name(0, modifier):
-+                self.known_modifiers_mask |= modifier
-+
-+    def idle(self):
-+        self.emit("activate")
-+        return False
-+
-+    def activate(self):
-+        GLib.idle_add(self.run)
-+
-+    def grab(self, shortcut):
-+        keycode = None
-+        accelerator = shortcut.replace("<Super>", "<Mod4>")
-+        keyval, modifiers = Gtk.accelerator_parse(accelerator)
-+
-+        try:
-+            keycode = self.keymap.get_entries_for_keyval(keyval).keys[0].keycode
-+        except AttributeError:
-+            # In older Gtk3 the get_entries_for_keyval() returns an unnamed tuple...
-+            keycode = self.keymap.get_entries_for_keyval(keyval)[1][0].keycode
-+        modifiers = int(modifiers)
-+        self.shortcuts.append([keycode, modifiers])
-+
-+        # Request to receive key press/release reports from other windows that may not be using modifiers
-+        catch = error.CatchError(error.BadWindow)
-+        self.window.change_attributes(onerror=catch, event_mask = X.KeyPressMask)
-+        if catch.get_error():
-+            return False
-+
-+        catch = error.CatchError(error.BadAccess)
-+        for ignored_mask in self.ignored_masks:
-+            mod = modifiers | ignored_mask
-+            result = self.window.grab_key(keycode, mod, True, X.GrabModeAsync, X.GrabModeAsync, onerror=catch)
-+        self.display.flush()
-+        if catch.get_error():
-+            return False
-+        return True
-+
-+    def run(self):
-+        self.running = True
-+        while self.running:
-+            event = self.display.next_event()
-+            modifiers = event.state & self.known_modifiers_mask
-+            self.current_shortcut = None
-+            if event.type == X.KeyPress and [event.detail, modifiers] in self.shortcuts:
-+                # Track this shortcut to know which app to activate
-+                self.current_shortcut = [event.detail, modifiers]
-+                GLib.idle_add(self.idle)
-+                self.display.allow_events(X.AsyncKeyboard, event.time)
-+            else:
-+                self.display.allow_events(X.ReplayKeyboard, event.time)
-+
-+    def stop(self):
-+        self.running = False
-+        self.ungrab()
-+        self.display.close()
-+
-+    def ungrab(self):
-+        for shortcut in self.shortcuts:
-+            self.window.ungrab_key(shortcut[0], X.AnyModifier, self.window)
-+
-+
- MatePanelApplet.Applet.factory_main("DockAppletFactory", True,
-                                     MatePanelApplet.Applet.__gtype__,
-                                     applet_factory, None)
diff --git a/debian/patches/series b/debian/patches/series
deleted file mode 100644
index 6e2b5d4..0000000
--- a/debian/patches/series
+++ /dev/null
@@ -1 +0,0 @@
-0000_listen_to_keypress_events_from_other_windows.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mate/mate-dock-applet.git



More information about the pkg-mate-commits mailing list