Skip to content

Commit

Permalink
Revert "Finally got auto paste to work Ulauncher#11"
Browse files Browse the repository at this point in the history
This reverts commit 998cf72.
  • Loading branch information
MyriaCore committed Sep 25, 2020
1 parent bb75166 commit 5efebf9
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 39 deletions.
37 changes: 37 additions & 0 deletions PasteAction.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk
from Xlib import X, display
from Xlib.ext import xtest
from ulauncher.api.shared.action.BaseAction import BaseAction

xdisplay = display.Display()

class PasteAction(BaseAction):
"""
Simulate paste key press
"""

def keep_app_open(self):
return False

def perform_key_event(self, accelerator, press, delay=X.CurrentTime):
key, modifiers = Gtk.accelerator_parse(accelerator)
keycode = xdisplay.keysym_to_keycode(key)
event_type = X.KeyPress if press else X.KeyRelease

if keycode != 0:
if modifiers & Gdk.ModifierType.CONTROL_MASK:
modcode = xdisplay.keysym_to_keycode(Gdk.KEY_Control_L)
xtest.fake_input(xdisplay, event_type, modcode, delay)

if modifiers & Gdk.ModifierType.SHIFT_MASK:
modcode = xdisplay.keysym_to_keycode(Gdk.KEY_Shift_L)
xtest.fake_input(xdisplay, event_type, modcode, delay)

xtest.fake_input(xdisplay, event_type, keycode, delay)
xdisplay.sync()

def run(self):
self.perform_key_event("<Control>v", True, 100)
self.perform_key_event("<Control>v", False, 0)
46 changes: 7 additions & 39 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,19 @@
from pprint import pprint
from ulauncher.api.client.Extension import Extension
from ulauncher.api.client.EventListener import EventListener
from ulauncher.api.shared.event import KeywordQueryEvent, ItemEnterEvent
from ulauncher.api.shared.event import KeywordQueryEvent
from ulauncher.api.shared.item.ExtensionResultItem import ExtensionResultItem
from ulauncher.api.shared.action.RenderResultListAction import RenderResultListAction
from ulauncher.api.shared.action.CopyToClipboardAction import CopyToClipboardAction
from ulauncher.api.shared.action.DoNothingAction import DoNothingAction
from ulauncher.api.shared.action.ExtensionCustomAction import ExtensionCustomAction
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk
from Xlib import X, display
from Xlib.ext import xtest
from ulauncher.api.shared.action.ActionList import ActionList
from PasteAction import PasteAction

logger = logging.getLogger(__name__)
extension_icon = 'images/icon.png'
db_path = os.path.join(os.path.dirname(__file__), 'emoji.sqlite')
conn = sqlite3.connect(db_path, check_same_thread=False)
conn.row_factory = sqlite3.Row
xdisplay = display.Display()

def normalize_skin_tone(tone):
"""
Expand All @@ -41,7 +36,6 @@ class EmojiExtension(Extension):
def __init__(self):
super(EmojiExtension, self).__init__()
self.subscribe(KeywordQueryEvent, KeywordQueryEventListener())
self.subscribe(ItemEnterEvent, ItemEnterEventListener())

self.allowed_skin_tones = ["", "dark", "light", "medium", "medium-dark", "medium-light"]

Expand Down Expand Up @@ -119,38 +113,12 @@ def on_event(self, event, extension):
if display_char: name += ' | %s' % code

items.append(ExtensionResultItem(icon=icon, name=name,
on_enter=ExtensionCustomAction(code)))
on_enter=ActionList([
CopyToClipboardAction(code),
PasteAction()
])))

return RenderResultListAction(items)

class ItemEnterEventListener(EventListener):

def paste(self):
self.perform_key_event("<Control>v", True, 100)
self.perform_key_event("<Control>v", False, 0)

def perform_key_event(self, accelerator, press, delay=X.CurrentTime):
key, modifiers = Gtk.accelerator_parse(accelerator)
keycode = xdisplay.keysym_to_keycode(key)
event_type = X.KeyPress if press else X.KeyRelease

if keycode != 0:
if modifiers & Gdk.ModifierType.CONTROL_MASK:
modcode = xdisplay.keysym_to_keycode(Gdk.KEY_Control_L)
xtest.fake_input(xdisplay, event_type, modcode, delay)

if modifiers & Gdk.ModifierType.SHIFT_MASK:
modcode = xdisplay.keysym_to_keycode(Gdk.KEY_Shift_L)
xtest.fake_input(xdisplay, event_type, modcode, delay)

xtest.fake_input(xdisplay, event_type, keycode, delay)
xdisplay.sync()

def on_event(self, event, extension):
code = event.get_data()
copy_action = CopyToClipboardAction(code)
copy_action.run()
self.paste()

if __name__ == '__main__':
EmojiExtension().run()

0 comments on commit 5efebf9

Please sign in to comment.