--- Begin Message ---
- To: Debian Bug Tracking System <submit@bugs.debian.org>
- Subject: alltray: Add multiple modifier support
- From: ItaΓ― BEN YAACOV <nib_maps@yahoo.com>
- Date: Mon, 19 Feb 2007 09:46:41 +0100
- Message-id: <20070219084641.2553.47617.reportbug@platypus.univ-lyon1.fr>
Package: alltray
Version: 0.69-2
Severity: wishlist
Tags: patch
Please apply this patch allowing several modifiers.
New syntax: -k Modifier:Modifier:...:keycode .
-- System Information:
Debian Release: 4.0
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: i386 (i686)
Shell: /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-4-686
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Versions of packages alltray depends on:
ii libatk1.0-0 1.12.4-2 The ATK accessibility toolkit
ii libc6 2.3.6.ds1-12 GNU C Library: Shared libraries
ii libcairo2 1.2.4-4 The Cairo 2D vector graphics libra
ii libfontconfig1 2.4.2-1 generic font configuration library
ii libfreetype6 2.2.1-5 FreeType 2 font engine, shared lib
ii libgconf2-4 2.16.0-3 GNOME configuration database syste
ii libglib2.0-0 2.12.6-2 The GLib library of C routines
ii libgtk2.0-0 2.8.20-5 The GTK+ graphical user interface
ii liborbit2 1:2.14.4-1 libraries for ORBit2 - a CORBA ORB
ii libpango1.0-0 1.14.8-5 Layout and rendering of internatio
ii libpng12-0 1.2.15~beta5-1 PNG library - runtime
ii libx11-6 2:1.0.3-5 X11 client-side library
ii libxcursor1 1.1.7-4 X cursor management library
ii libxext6 1:1.0.1-2 X11 miscellaneous extension librar
ii libxfixes3 1:4.0.1-5 X11 miscellaneous 'fixes' extensio
ii libxi6 1:1.0.1-4 X11 Input extension library
ii libxinerama1 1:1.0.1-4.1 X11 Xinerama extension library
ii libxrandr2 2:1.1.0.2-5 X11 RandR extension library
ii libxrender1 1:0.9.1-3 X Rendering Extension client libra
ii zlib1g 1:1.2.3-13 compression library - runtime
alltray recommends no packages.
-- no debconf information
diff -u -Nru alltray-0.69/src/shortcut.c alltray-0.69.new/src/shortcut.c
--- alltray-0.69/src/shortcut.c 2006-07-06 17:42:23.000000000 +0200
+++ alltray-0.69.new/src/shortcut.c 2007-02-19 09:41:58.000000000 +0100
@@ -44,13 +44,27 @@
#include "common.h"
#include "utils.h"
+struct {
+ gchar* name;
+ unsigned int mask;
+} modifiers[] = {
+ { "Shift", ShiftMask },
+ { "Control", ControlMask },
+ { "Alt", Mod1Mask },
+ { "Winkey_right", Mod4Mask },
+ { "AltGr", Mod5Mask },
+ { NULL, 0}
+};
+
+
gboolean parse_shortcut (gchar *string,
unsigned int *key_return, unsigned int *modifier_return)
{
gchar *tmp=NULL;
gchar *colon=NULL;
- gchar *modifier=NULL;
+ gchar *current=NULL;
+ int i;
if (debug) printf ("parse_shortcut\n");
@@ -59,74 +73,34 @@
return FALSE;
tmp=g_strdup (string);
-
- colon=strstr (tmp,":");
- if (colon) {
- if (debug) printf ("colon: %s\n", colon);
+ *modifier_return=0;
+ for (current=tmp; (colon=strchr (current,':')) != NULL; current=colon+1) {
- *key_return =atoi (++colon);
-
- if (*key_return == 0)
- *key_return=XKeysymToKeycode(GDK_DISPLAY(), XStringToKeysym(colon));
-
- *(--colon)=0;
- modifier=tmp;
-
- if (debug) printf ("modifier: %s\n", modifier);
-
- do {
-
- if (!strcmp (modifier, "Shift")) {
- if (debug) printf ("found Shift\n");
- *modifier_return=ShiftMask;
- break;
- }
-
- if (!strcmp (modifier, "Control")) {
- if (debug) printf ("found Control\n");
- *modifier_return=ControlMask;
- break;
- }
-
- if (!strcmp (modifier, "Alt")) {
- if (debug) printf ("found Alt\n");
- *modifier_return=Mod1Mask;
- break;
- }
-
- if (!strcmp (modifier, "Winkey_right")) {
- if (debug) printf ("found Winkey_right\n");
- *modifier_return=Mod4Mask;
- break;
- }
+ *colon=0;
- if (!strcmp (modifier, "AltGr")) {
- if (debug) printf ("found AltGr\n");
- *modifier_return=Mod5Mask;
- break;
- }
+ if (debug) printf ("modifier: %s\n", current);
+ for (i = 0; modifiers[i].name; ++i) {
+ if (!strcmp (current, modifiers[i].name)) {
+ if (debug) printf ("found %s\n", modifiers[i].name);
+ *modifier_return|=modifiers[i].mask;
+ break;
+ }
+ }
+ if (!modifiers[i].name) {
printf ("\n\nAllTray: unknown modifier!"\
" (Only \"Shift\", \"Control\" \"Alt\" or \"AltGr\" is allowed).\n\n");
-
g_free (tmp);
return FALSE;
+ }
+ }
- } while (0);
-
-
- } else {
-
- *key_return =atoi (tmp);
-
- if (*key_return == 0)
- *key_return=XKeysymToKeycode(GDK_DISPLAY(), XStringToKeysym(tmp));
+ *key_return = atoi (current);
- *modifier_return=AnyModifier;
-
- }
+ if (*key_return == 0)
+ *key_return=XKeysymToKeycode(GDK_DISPLAY(), XStringToKeysym(current));
g_free (tmp);
--- End Message ---