def update_label(self):
     if not self.accel_string:
         text = _("unassigned")
     else:
         key, codes, mods = Gtk.accelerator_parse_with_keycode(self.accel_string)
         text = Gtk.accelerator_get_label_with_keycode(None, key, codes[0], mods)
     self.set_property("text", text)
Beispiel #2
0
 def update_label(self):
     if not self.accel_string:
         text = _("unassigned")
     else:
         key, codes, mods = Gtk.accelerator_parse_with_keycode(self.accel_string)
         text = Gtk.accelerator_get_label_with_keycode(None, key, codes[0], mods)
     self.set_property("text", text)
Beispiel #3
0
 def update_label(self):
     text = _("unassigned")
     if self.accel_string:
         key, codes, mods = Gtk.accelerator_parse_with_keycode(self.accel_string)
         if codes is not None and len(codes) > 0:
             text = Gtk.accelerator_get_label_with_keycode(None, key, codes[0], mods)
     self.set_property("text", text)
Beispiel #4
0
def get_keybinding_display_name(accel_string):
    """Get keybinding display name.

    Converts an accelerator keyval and modifier mask into a (possibly translated) string that can
    be displayed to a user.

    Parameters
    ----------
    accel_string : str
        Accel. string.

    Returns
    -------
    str
        Accel. string display name.
    """
    text = accel_string

    if accel_string:
        key, codes, mods = Gtk.accelerator_parse_with_keycode(accel_string)
        if codes is not None and len(codes) > 0:
            text = Gtk.accelerator_get_label_with_keycode(
                None, key, codes[0], mods)

    return text
Beispiel #5
0
 def update_label(self):
     text = _("unassigned")
     if self.accel_string:
         key, codes, mods = Gtk.accelerator_parse_with_keycode(
             self.accel_string)
         if codes is not None and len(codes) > 0:
             text = Gtk.accelerator_get_label_with_keycode(
                 None, key, codes[0], mods)
     self.set_property("text", text)
    def get_keybinding_display_name(self, accel_string):
        text = ""

        if accel_string:
            key, codes, mods = Gtk.accelerator_parse_with_keycode(accel_string)
            if codes is not None and len(codes) > 0:
                text = Gtk.accelerator_get_label_with_keycode(None, key, codes[0], mods)

        return text
    def on_key_release(self, widget, event):
        self.ungrab()
        self.teaching = False
        event = self.press_event

        display = widget.get_display()

        keyval = 0
        group = event.group
        accel_mods = event.state

        # HACK: we don't want to use SysRq as a keybinding (but we do
        # want Alt+Print), so we avoid translation from Alt+Print to SysRq

        if event.keyval == Gdk.KEY_Sys_Req and \
           ((accel_mods & Gdk.ModifierType.MOD1_MASK) != 0):
            keyval = Gdk.KEY_Print
            consumed_modifiers = 0
        else:
            keymap = Gdk.Keymap.get_for_display(display)
            group_mask_disabled = False
            shift_group_mask = 0

            shift_group_mask = keymap.get_modifier_mask(Gdk.ModifierIntent.SHIFT_GROUP)

            if Gtk.accelerator_get_default_mod_mask() & accel_mods & shift_group_mask:
                accel_mods &= ~shift_group_mask
                group = 0
                group_mask_disabled = True

            retval, keyval, effective_group, level, consumed_modifiers = \
                   keymap.translate_keyboard_state(event.hardware_keycode, accel_mods, group)

            if group_mask_disabled:
                effective_group = 1

            if consumed_modifiers:
                consumed_modifiers &= ~shift_group_mask

        accel_key = Gdk.keyval_to_lower(keyval)
        if accel_key == Gdk.KEY_ISO_Left_Tab:
            accel_key = Gdk.KEY_Tab

        accel_mods &= Gtk.accelerator_get_default_mod_mask()

        accel_mods &= ~consumed_modifiers

        if accel_key != keyval:
            accel_mods |= Gdk.ModifierType.SHIFT_MASK

        if accel_mods == 0:
            if accel_key == Gdk.KEY_Escape:
                self.update_label()
                self.teaching = False
                self.path = None
                self.press_event = None
                return True
            elif accel_key == Gdk.KEY_BackSpace:
                self.teaching = False
                self.press_event = None
                self.set_value(None)
                self.emit("accel-cleared", self.path)
                self.path = None
                return True

        accel_string = Gtk.accelerator_name_with_keycode(None, accel_key, event.hardware_keycode, Gdk.ModifierType(accel_mods))
        accel_label = Gtk.accelerator_get_label_with_keycode(None, accel_key, event.hardware_keycode, Gdk.ModifierType(accel_mods))

        if (accel_mods == 0 or accel_mods == Gdk.ModifierType.SHIFT_MASK) and event.hardware_keycode != 0:
            if ((keyval >= Gdk.KEY_a                    and keyval <= Gdk.KEY_z)
            or  (keyval >= Gdk.KEY_A                    and keyval <= Gdk.KEY_Z)
            or  (keyval >= Gdk.KEY_0                    and keyval <= Gdk.KEY_9)
            or  (keyval >= Gdk.KEY_kana_fullstop        and keyval <= Gdk.KEY_semivoicedsound)
            or  (keyval >= Gdk.KEY_Arabic_comma         and keyval <= Gdk.KEY_Arabic_sukun)
            or  (keyval >= Gdk.KEY_Serbian_dje          and keyval <= Gdk.KEY_Cyrillic_HARDSIGN)
            or  (keyval >= Gdk.KEY_Greek_ALPHAaccent    and keyval <= Gdk.KEY_Greek_omega)
            or  (keyval >= Gdk.KEY_hebrew_doublelowline and keyval <= Gdk.KEY_hebrew_taf)
            or  (keyval >= Gdk.KEY_Thai_kokai           and keyval <= Gdk.KEY_Thai_lekkao)
            or  (keyval >= Gdk.KEY_Hangul               and keyval <= Gdk.KEY_Hangul_Special)
            or  (keyval >= Gdk.KEY_Hangul_Kiyeog        and keyval <= Gdk.KEY_Hangul_J_YeorinHieuh)
            or  keyval in FORBIDDEN_KEYVALS):
                dialog = Gtk.MessageDialog(None,
                                    Gtk.DialogFlags.DESTROY_WITH_PARENT,
                                    Gtk.MessageType.ERROR,
                                    Gtk.ButtonsType.OK,
                                    None)
                dialog.set_default_size(400, 200)
                msg = _("\nThis key combination, \'<b>%s</b>\' cannot be used because it would become impossible to type using this key.\n\n")
                msg += _("Please try again with a modifier key such as Control, Alt or Super (Windows key) at the same time.\n")
                dialog.set_markup(msg % (accel_label))
                dialog.show_all()
                response = dialog.run()
                dialog.destroy()
                return True

        self.press_event = None
        self.set_value(accel_string)
        self.emit("accel-edited", self.path, accel_string, accel_label)
        self.path = None

        return True
Beispiel #8
0
    def on_key_release(self, widget, event):
        self.ungrab()
        self.teaching = False
        event = self.press_event

        display = widget.get_display()

        keyval = 0
        group = event.group
        accel_mods = event.state

        # HACK: we don't want to use SysRq as a keybinding (but we do
        # want Alt+Print), so we avoid translation from Alt+Print to SysRq

        if event.keyval == Gdk.KEY_Sys_Req and \
           ((accel_mods & Gdk.ModifierType.MOD1_MASK) != 0):
            keyval = Gdk.KEY_Print
            consumed_modifiers = 0
        else:
            keymap = Gdk.Keymap.get_for_display(display)
            group_mask_disabled = False
            shift_group_mask = 0

            shift_group_mask = keymap.get_modifier_mask(
                Gdk.ModifierIntent.SHIFT_GROUP)

            retval, keyval, effective_group, level, consumed_modifiers = \
                keymap.translate_keyboard_state(event.hardware_keycode, accel_mods, group)

            if group_mask_disabled:
                effective_group = 1

            if consumed_modifiers:
                consumed_modifiers &= ~shift_group_mask

        accel_key = Gdk.keyval_to_lower(keyval)
        if accel_key == Gdk.KEY_ISO_Left_Tab:
            accel_key = Gdk.KEY_Tab

        accel_mods &= Gtk.accelerator_get_default_mod_mask()

        if accel_mods == 0:
            if accel_key == Gdk.KEY_Escape:
                self.update_label()
                self.teaching = False
                self.path = None
                self.press_event = None
                return True
            elif accel_key == Gdk.KEY_BackSpace:
                self.teaching = False
                self.press_event = None
                self.set_value(None)
                self.emit("accel-cleared", self.path)
                self.path = None
                return True

        accel_string = Gtk.accelerator_name_with_keycode(
            None, accel_key, event.hardware_keycode,
            Gdk.ModifierType(accel_mods))
        accel_label = Gtk.accelerator_get_label_with_keycode(
            None, accel_key, event.hardware_keycode,
            Gdk.ModifierType(accel_mods))

        # print("Storing %s as %s" % (accel_label, accel_string))

        if (accel_mods == 0 or accel_mods == Gdk.ModifierType.SHIFT_MASK
            ) and event.hardware_keycode != 0:
            if ((keyval >= Gdk.KEY_a and keyval <= Gdk.KEY_z)
                    or (keyval >= Gdk.KEY_A and keyval <= Gdk.KEY_Z)
                    or (keyval >= Gdk.KEY_0 and keyval <= Gdk.KEY_9)
                    or (keyval >= Gdk.KEY_kana_fullstop
                        and keyval <= Gdk.KEY_semivoicedsound)
                    or (keyval >= Gdk.KEY_Arabic_comma
                        and keyval <= Gdk.KEY_Arabic_sukun)
                    or (keyval >= Gdk.KEY_Serbian_dje
                        and keyval <= Gdk.KEY_Cyrillic_HARDSIGN)
                    or (keyval >= Gdk.KEY_Greek_ALPHAaccent
                        and keyval <= Gdk.KEY_Greek_omega)
                    or (keyval >= Gdk.KEY_hebrew_doublelowline
                        and keyval <= Gdk.KEY_hebrew_taf)
                    or (keyval >= Gdk.KEY_Thai_kokai
                        and keyval <= Gdk.KEY_Thai_lekkao) or
                (keyval >= Gdk.KEY_Hangul and keyval <= Gdk.KEY_Hangul_Special)
                    or (keyval >= Gdk.KEY_Hangul_Kiyeog
                        and keyval <= Gdk.KEY_Hangul_J_YeorinHieuh)
                    or keyval in FORBIDDEN_KEYVALS):
                dialog = Gtk.MessageDialog(None,
                                           Gtk.DialogFlags.DESTROY_WITH_PARENT,
                                           Gtk.MessageType.ERROR,
                                           Gtk.ButtonsType.OK, None)
                dialog.set_default_size(400, 200)
                msg = _(
                    "\nThis key combination, \'<b>%s</b>\' cannot be used because it would become impossible to type using this key.\n\n"
                )
                msg += _(
                    "Please try again with a modifier key such as Control, Alt or Super (Windows key) at the same time.\n"
                )
                dialog.set_markup(msg % (accel_label))
                dialog.show_all()
                response = dialog.run()
                dialog.destroy()
                return True

        self.press_event = None
        self.set_value(accel_string)
        self.emit("accel-edited", self.path, accel_string, accel_label)
        self.path = None

        return True
    def on_key_release(self, widget, event):
        """On key release callback.

        Parameters
        ----------
        widget : Gtk.CellEditable
            The ``Gtk.CellEditable`` for the widget.
        event : Gdk.EventKey
            The ``Gdk.EventKey`` which triggered this signal.

        Returns
        -------
        bool
            Whether to propagate the event or not.
        """
        if self.press_event is not None:
            self.ungrab()

        self.teaching = False
        event = self.press_event or event

        display = widget.get_display()

        keyval = 0
        group = event.group
        accel_mods = event.state

        # HACK: we don't want to use SysRq as a keybinding (but we do
        # want Alt+Print), so we avoid translation from Alt+Print to SysRq

        if event.keyval == Gdk.KEY_Sys_Req and \
           ((accel_mods & Gdk.ModifierType.MOD1_MASK) != 0):
            keyval = Gdk.KEY_Print
            consumed_modifiers = 0
        else:
            keymap = Gdk.Keymap.get_for_display(display)
            shift_group_mask = 0

            shift_group_mask = keymap.get_modifier_mask(Gdk.ModifierIntent.SHIFT_GROUP)

            retval, keyval, effective_group, level, consumed_modifiers = \
                keymap.translate_keyboard_state(event.hardware_keycode, accel_mods, group)

            if consumed_modifiers:
                consumed_modifiers &= ~shift_group_mask

        accel_key = Gdk.keyval_to_lower(keyval)
        if accel_key == Gdk.KEY_ISO_Left_Tab:
            accel_key = Gdk.KEY_Tab

        accel_mods &= Gtk.accelerator_get_default_mod_mask()

        if accel_mods == 0:
            if accel_key == Gdk.KEY_Escape:
                self.update_label()
                self.teaching = False
                self.path = None
                self.press_event = None
                return Gdk.EVENT_STOP
            elif accel_key == Gdk.KEY_BackSpace:
                self.teaching = False
                self.press_event = None
                self.set_value(None)
                self.emit("accel-cleared", self.path)
                self.path = None
                return Gdk.EVENT_STOP
            elif accel_key == Gdk.KEY_Return or accel_key == Gdk.KEY_KP_Enter or accel_key == Gdk.KEY_space:
                return Gdk.EVENT_STOP

        accel_string = Gtk.accelerator_name_with_keycode(
            None, accel_key, event.hardware_keycode, Gdk.ModifierType(accel_mods))
        accel_label = Gtk.accelerator_get_label_with_keycode(
            None, accel_key, event.hardware_keycode, Gdk.ModifierType(accel_mods))

        # print("accel_mods: %d, keyval: %d, Storing %s as %s" % (accel_mods, keyval, accel_label, accel_string))

        if (accel_mods == 0 or accel_mods == Gdk.ModifierType.SHIFT_MASK) and event.hardware_keycode != 0:
            if ((keyval >= Gdk.KEY_a and keyval <= Gdk.KEY_z) or
                (keyval >= Gdk.KEY_A and keyval <= Gdk.KEY_Z) or
                (keyval >= Gdk.KEY_0 and keyval <= Gdk.KEY_9) or
                (keyval >= Gdk.KEY_kana_fullstop and keyval <= Gdk.KEY_semivoicedsound) or
                (keyval >= Gdk.KEY_Arabic_comma and keyval <= Gdk.KEY_Arabic_sukun) or
                (keyval >= Gdk.KEY_Serbian_dje and keyval <= Gdk.KEY_Cyrillic_HARDSIGN) or
                (keyval >= Gdk.KEY_Greek_ALPHAaccent and keyval <= Gdk.KEY_Greek_omega) or
                (keyval >= Gdk.KEY_hebrew_doublelowline and keyval <= Gdk.KEY_hebrew_taf) or
                (keyval >= Gdk.KEY_Thai_kokai and keyval <= Gdk.KEY_Thai_lekkao) or
                (keyval >= Gdk.KEY_Hangul and keyval <= Gdk.KEY_Hangul_Special) or
                (keyval >= Gdk.KEY_Hangul_Kiyeog and keyval <= Gdk.KEY_Hangul_J_YeorinHieuh) or
                    keyval in FORBIDDEN_KEYVALS):
                msg = _(
                    "\nThis key combination, \'<b>%s</b>\' cannot be used because it would become impossible to type using this key.\n\n")
                msg += _("Please try again with a modifier key such as Control, Alt or Super (Windows key) at the same time.\n")
                display_message_dialog(self.a_widget, "", msg, "error")

                return Gdk.EVENT_STOP

        self.press_event = None
        self.set_value(accel_string)
        self.emit("accel-edited", self.path, accel_string, accel_label)
        self.path = None

        return Gdk.EVENT_STOP