wok rev 11955

lxpanel: Patch cpu applet for smaller size and clean pkg
author Christophe Lincoln <pankso@slitaz.org>
date Thu Mar 01 17:05:30 2012 +0100 (2012-03-01)
parents 9602efab8068
children 1680166a543f
files lxpanel/receipt lxpanel/stuff/Fix-failure-to-react-to-keyboard-map-changes-initiat.patch lxpanel/stuff/configure_desktop_number.patch lxpanel/stuff/cpu-color.patch lxpanel/stuff/cpu-size-color.patch lxpanel/stuff/fr.patch lxpanel/stuff/ptk-app-menu.patch
line diff
     1.1 --- a/lxpanel/receipt	Thu Mar 01 07:31:38 2012 -0800
     1.2 +++ b/lxpanel/receipt	Thu Mar 01 17:05:30 2012 +0100
     1.3 @@ -19,11 +19,9 @@
     1.4  compile_rules()
     1.5  {
     1.6  	cd $src
     1.7 -	#patch -p1 -i $stuff/Fix-failure-to-react-to-keyboard-map-changes-initiat.patch
     1.8 -	# Devnote : this patch shouldn't be necessary in next release of lxpanel (current : 0.5.8).
     1.9  	patch -p1 -i $stuff/configure_desktop_number.patch
    1.10  	patch -p1 -i $stuff/fix_position.patch
    1.11 -	patch -p0 -i $stuff/cpu-color.patch || exit 1
    1.12 +	patch -p0 -i $stuff/cpu-size-color.patch || exit 1
    1.13  	./configure --with-plugins=all $CONFIGURE_ARGS &&
    1.14  	make && make install
    1.15  }
     2.1 --- a/lxpanel/stuff/Fix-failure-to-react-to-keyboard-map-changes-initiat.patch	Thu Mar 01 07:31:38 2012 -0800
     2.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.3 @@ -1,555 +0,0 @@
     2.4 -From 438d9fdbd3e0be04de933705917d508a02b7c04b Mon Sep 17 00:00:00 2001
     2.5 -From: Marty Jack <martyj@linux.local>
     2.6 -Date: Sat, 20 Feb 2010 16:23:57 -0500
     2.7 -Subject: [PATCH 4/5] Fix failure to react to keyboard map changes initiated outside the plugin
     2.8 - - Occurred when setxkbmap was run, or when HAL configured the keyboard at X startup
     2.9 - - Caused by failure to process the NewKeyboard event
    2.10 - - Caused by dropping events due to faulty code to read them
    2.11 - - Cosmetic change, the tooltip now the Xkb Group name rather than Xkb Symbol name
    2.12 -
    2.13 ----
    2.14 - src/plugins/xkb/xkb-plugin.c |   92 +++++++++--------
    2.15 - src/plugins/xkb/xkb.c        |  236 +++++++++++++++++++++--------------------
    2.16 - src/plugins/xkb/xkb.h        |    7 +-
    2.17 - 3 files changed, 173 insertions(+), 162 deletions(-)
    2.18 -
    2.19 -diff --git a/src/plugins/xkb/xkb-plugin.c b/src/plugins/xkb/xkb-plugin.c
    2.20 -index f49a77d..80a14ba 100644
    2.21 ---- a/src/plugins/xkb/xkb-plugin.c
    2.22 -+++ b/src/plugins/xkb/xkb-plugin.c
    2.23 -@@ -1,18 +1,23 @@
    2.24 --/*
    2.25 --//====================================================================
    2.26 --//  xfce4-xkb-plugin - XFCE4 Xkb Layout Indicator panel plugin
    2.27 --// -------------------------------------------------------------------
    2.28 --//  Alexander Iliev <sasoiliev@mamul.org>
    2.29 --//  20-Feb-04
    2.30 --// -------------------------------------------------------------------
    2.31 --//  Parts of this code belong to Michael Glickman <wmalms@yahooo.com>
    2.32 --//  and his program wmxkb.
    2.33 --//  WARNING: DO NOT BOTHER Michael Glickman WITH QUESTIONS ABOUT THIS
    2.34 --//           PROGRAM!!! SEND INSTEAD EMAILS TO <sasoiliev@mamul.org>
    2.35 --//====================================================================
    2.36 --*/
    2.37 --
    2.38 --/* Modified by Hong Jen Yee (PCMan) <pcman.tw@gmail.com> on 2008-04-06 for lxpanel */
    2.39 -+/**
    2.40 -+ * Copyright (c) 2010 LxDE Developers, see the file AUTHORS for details.
    2.41 -+ *
    2.42 -+ * This program is free software; you can redistribute it and/or modify
    2.43 -+ * it under the terms of the GNU General Public License as published by
    2.44 -+ * the Free Software Foundation; either version 2 of the License, or
    2.45 -+ * (at your option) any later version.
    2.46 -+ *
    2.47 -+ * This program is distributed in the hope that it will be useful,
    2.48 -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
    2.49 -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    2.50 -+ * GNU General Public License for more details.
    2.51 -+ *
    2.52 -+ * You should have received a copy of the GNU General Public License
    2.53 -+ * along with this program; if not, write to the Free Software Foundation,
    2.54 -+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    2.55 -+ */
    2.56 -+
    2.57 -+/* Originally derived from xfce4-xkb-plugin, Copyright 2004 Alexander Iliev,
    2.58 -+ * which credits Michael Glickman. */
    2.59 - 
    2.60 - #ifdef HAVE_CONFIG_H
    2.61 - #include <config.h>
    2.62 -@@ -49,38 +54,45 @@ void xkb_redraw(XkbPlugin * xkb)
    2.63 -     if (xkb->display_type == IMAGE)
    2.64 -     {
    2.65 -         int size = xkb->plugin->panel->icon_size;
    2.66 --        char * group_name = (char *) xkb_get_current_group_name_lowercase(xkb);
    2.67 --        char * filename = g_strdup_printf("%s/%s.png", FLAGSDIR, group_name);
    2.68 --        GdkPixbuf * unscaled_pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
    2.69 --        g_free(filename);
    2.70 --        g_free(group_name);
    2.71 --
    2.72 --        if (unscaled_pixbuf != NULL)
    2.73 -+        char * group_name = (char *) xkb_get_current_symbol_name_lowercase(xkb);
    2.74 -+        if (group_name != NULL)
    2.75 -         {
    2.76 --            /* Loaded successfully. */
    2.77 --            int width = gdk_pixbuf_get_width(unscaled_pixbuf);
    2.78 --            int height = gdk_pixbuf_get_height(unscaled_pixbuf);
    2.79 --            GdkPixbuf * pixbuf = gdk_pixbuf_scale_simple(unscaled_pixbuf, size * width / height, size, GDK_INTERP_BILINEAR);
    2.80 --            if (pixbuf != NULL)
    2.81 -+            char * filename = g_strdup_printf("%s/%s.png", FLAGSDIR, group_name);
    2.82 -+            GdkPixbuf * unscaled_pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
    2.83 -+            g_free(filename);
    2.84 -+            g_free(group_name);
    2.85 -+
    2.86 -+            if (unscaled_pixbuf != NULL)
    2.87 -             {
    2.88 --                gtk_image_set_from_pixbuf(GTK_IMAGE(xkb->image), pixbuf);
    2.89 --                g_object_unref(G_OBJECT(pixbuf));
    2.90 --                gtk_widget_hide(xkb->label);
    2.91 --                gtk_widget_show(xkb->image);
    2.92 --                gtk_widget_set_tooltip_text(xkb->btn, xkb_get_current_group_name(xkb));
    2.93 --                valid_image = TRUE;
    2.94 -+                /* Loaded successfully. */
    2.95 -+                int width = gdk_pixbuf_get_width(unscaled_pixbuf);
    2.96 -+                int height = gdk_pixbuf_get_height(unscaled_pixbuf);
    2.97 -+                GdkPixbuf * pixbuf = gdk_pixbuf_scale_simple(unscaled_pixbuf, size * width / height, size, GDK_INTERP_BILINEAR);
    2.98 -+                if (pixbuf != NULL)
    2.99 -+                {
   2.100 -+                    gtk_image_set_from_pixbuf(GTK_IMAGE(xkb->image), pixbuf);
   2.101 -+                    g_object_unref(G_OBJECT(pixbuf));
   2.102 -+                    gtk_widget_hide(xkb->label);
   2.103 -+                    gtk_widget_show(xkb->image);
   2.104 -+                    gtk_widget_set_tooltip_text(xkb->btn, xkb_get_current_group_name(xkb));
   2.105 -+                    valid_image = TRUE;
   2.106 -+                }
   2.107 -+                g_object_unref(unscaled_pixbuf);
   2.108 -             }
   2.109 --            g_object_unref(unscaled_pixbuf);
   2.110 -         }
   2.111 -     }
   2.112 - 
   2.113 -     /* Set the label. */
   2.114 -     if ((xkb->display_type == TEXT) || ( ! valid_image))
   2.115 -     {
   2.116 --        panel_draw_label_text(xkb->plugin->panel, xkb->label, (char *) xkb_get_current_group_name(xkb), TRUE, TRUE);
   2.117 --        gtk_widget_hide(xkb->image);
   2.118 --        gtk_widget_show(xkb->label);
   2.119 --        gtk_widget_set_tooltip_text(xkb->btn, NULL);
   2.120 -+        char * group_name = (char *) xkb_get_current_symbol_name(xkb);
   2.121 -+        if (group_name != NULL)
   2.122 -+        {
   2.123 -+            panel_draw_label_text(xkb->plugin->panel, xkb->label, (char *) group_name, TRUE, TRUE);
   2.124 -+            gtk_widget_hide(xkb->image);
   2.125 -+            gtk_widget_show(xkb->label);
   2.126 -+            gtk_widget_set_tooltip_text(xkb->btn, xkb_get_current_group_name(xkb));
   2.127 -+        }
   2.128 -     }
   2.129 - }
   2.130 - 
   2.131 -@@ -196,10 +208,6 @@ static int xkb_constructor(Plugin * plugin, char ** fp)
   2.132 -     /* Initialize the XKB interface. */
   2.133 -     xkb_mechanism_constructor(xkb);
   2.134 - 
   2.135 --    /* Initialize a channel to listen for XKB events. */
   2.136 --    GIOChannel * channel = g_io_channel_unix_new(xkb_get_connection_number(xkb));
   2.137 --    xkb->source_id = g_io_add_watch(channel, G_IO_IN | G_IO_PRI, (GIOFunc) xkb_gio_callback, (gpointer) xkb);
   2.138 --
   2.139 -     /* Connect signals. */
   2.140 -     g_signal_connect(xkb->btn, "button-press-event", G_CALLBACK(xkb_button_press_event), xkb);
   2.141 -     g_signal_connect(xkb->btn, "scroll-event", G_CALLBACK(xkb_scroll_event), xkb);
   2.142 -diff --git a/src/plugins/xkb/xkb.c b/src/plugins/xkb/xkb.c
   2.143 -index 5bb0c39..898a931 100644
   2.144 ---- a/src/plugins/xkb/xkb.c
   2.145 -+++ b/src/plugins/xkb/xkb.c
   2.146 -@@ -1,18 +1,23 @@
   2.147 --/*
   2.148 --// ====================================================================
   2.149 --//  xfce4-xkb-plugin - XFCE4 Xkb Layout Indicator panel plugin
   2.150 --// -------------------------------------------------------------------
   2.151 --//  Alexander Iliev <sasoiliev@mamul.org>
   2.152 --//  20-Feb-04
   2.153 --// -------------------------------------------------------------------
   2.154 --//  Parts of this code belong to Michael Glickman <wmalms@yahooo.com>
   2.155 --//  and his program wmxkb.
   2.156 --//  WARNING: DO NOT BOTHER Michael Glickman WITH QUESTIONS ABOUT THIS
   2.157 --//           PROGRAM!!! SEND INSTEAD EMAILS TO <sasoiliev@mamul.org>
   2.158 --//====================================================================
   2.159 --*/
   2.160 --
   2.161 --/* Modified by Hong Jen Yee (PCMan) <pcman.tw@gmail.com> on 2008-04-06 for lxpanel */
   2.162 -+/**
   2.163 -+ * Copyright (c) 2010 LxDE Developers, see the file AUTHORS for details.
   2.164 -+ *
   2.165 -+ * This program is free software; you can redistribute it and/or modify
   2.166 -+ * it under the terms of the GNU General Public License as published by
   2.167 -+ * the Free Software Foundation; either version 2 of the License, or
   2.168 -+ * (at your option) any later version.
   2.169 -+ *
   2.170 -+ * This program is distributed in the hope that it will be useful,
   2.171 -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
   2.172 -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   2.173 -+ * GNU General Public License for more details.
   2.174 -+ *
   2.175 -+ * You should have received a copy of the GNU General Public License
   2.176 -+ * along with this program; if not, write to the Free Software Foundation,
   2.177 -+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
   2.178 -+ */
   2.179 -+
   2.180 -+/* Originally derived from xfce4-xkb-plugin, Copyright 2004 Alexander Iliev,
   2.181 -+ * which credits Michael Glickman. */
   2.182 - 
   2.183 - #include "xkb.h"
   2.184 - 
   2.185 -@@ -26,9 +31,13 @@
   2.186 - #include <gdk-pixbuf/gdk-pixbuf.h>
   2.187 - #include <glib.h>
   2.188 - 
   2.189 -+/* The X Keyboard Extension: Library Specification
   2.190 -+ * http://www.xfree86.org/current/XKBlib.pdf */
   2.191 -+
   2.192 - static void xkb_enter_locale_by_process(XkbPlugin * xkb);
   2.193 - static void refresh_group_xkb(XkbPlugin * xkb);
   2.194 --static int do_init_xkb(XkbPlugin * xkb);
   2.195 -+static int initialize_keyboard_description(XkbPlugin * xkb);
   2.196 -+static GdkFilterReturn xkb_event_filter(GdkXEvent * xevent, GdkEvent * event, XkbPlugin * xkb);
   2.197 - 
   2.198 - /* Insert a process and its layout into the hash table. */
   2.199 - static void xkb_enter_locale_by_process(XkbPlugin * xkb)
   2.200 -@@ -56,60 +65,65 @@ int xkb_get_group_count(XkbPlugin * xkb)
   2.201 -   return xkb->group_count;
   2.202 - }
   2.203 - 
   2.204 -+/* Get the current group name. */
   2.205 -+const char * xkb_get_current_group_name(XkbPlugin * xkb) 
   2.206 -+{
   2.207 -+    return xkb->group_names[xkb->current_group_xkb_no];
   2.208 -+}
   2.209 -+
   2.210 - /* Convert a group number to a symbol name. */
   2.211 - const char * xkb_get_symbol_name_by_res_no(XkbPlugin * xkb, int n) 
   2.212 - {
   2.213 -     return xkb->symbol_names[n];
   2.214 - }
   2.215 - 
   2.216 --/* Get the current group name. */
   2.217 --const char * xkb_get_current_group_name(XkbPlugin * xkb) 
   2.218 -+/* Get the current symbol name. */
   2.219 -+const char * xkb_get_current_symbol_name(XkbPlugin * xkb) 
   2.220 - {
   2.221 -     return xkb_get_symbol_name_by_res_no(xkb, xkb->current_group_xkb_no);
   2.222 - }
   2.223 - 
   2.224 --/* Get the current group name converted to lowercase. */
   2.225 --const char * xkb_get_current_group_name_lowercase(XkbPlugin * xkb) 
   2.226 -+/* Get the current symbol name converted to lowercase. */
   2.227 -+const char * xkb_get_current_symbol_name_lowercase(XkbPlugin * xkb) 
   2.228 - {
   2.229 --    const char * tmp = xkb_get_current_group_name(xkb);
   2.230 --    return g_utf8_strdown(tmp, -1);
   2.231 -+    const char * tmp = xkb_get_current_symbol_name(xkb);
   2.232 -+    return ((tmp != NULL) ? g_utf8_strdown(tmp, -1) : NULL);
   2.233 - }
   2.234 - 
   2.235 - /* Refresh current group number from Xkb state. */
   2.236 - static void refresh_group_xkb(XkbPlugin * xkb) 
   2.237 - {
   2.238 -     XkbStateRec xkb_state;
   2.239 --    XkbGetState(xkb->dsp, xkb->device_id, &xkb_state);
   2.240 -+    XkbGetState(GDK_DISPLAY(), XkbUseCoreKbd, &xkb_state);
   2.241 -     xkb->current_group_xkb_no = xkb_state.group;
   2.242 - }
   2.243 - 
   2.244 --/* Initialize the Xkb structures. */
   2.245 --static int do_init_xkb(XkbPlugin * xkb) 
   2.246 -+/* Initialize the keyboard description initially or after a NewKeyboard event. */
   2.247 -+static int initialize_keyboard_description(XkbPlugin * xkb)
   2.248 - {
   2.249 --    /* Create hash table. */
   2.250 --    xkb->group_hash_table = g_hash_table_new(g_direct_hash, NULL);
   2.251 --
   2.252 --    /* Initialize the Xkb extension. */
   2.253 --    int major, minor, opcode;
   2.254 --    Bool status = XkbQueryExtension(xkb->dsp, &opcode,
   2.255 --        &xkb->base_event_code, &xkb->base_error_code, &major, &minor);
   2.256 --
   2.257 --    /* Use the core keyboard. */
   2.258 --    xkb->device_id = XkbUseCoreKbd;
   2.259 -+    /* Free the strings. */
   2.260 -+    int i;
   2.261 -+    for (i = 0; i < XkbNumKbdGroups; i += 1)
   2.262 -+    {
   2.263 -+        g_free(xkb->group_names[i]);
   2.264 -+        g_free(xkb->symbol_names[i]);
   2.265 -+        xkb->group_names[i] = NULL;
   2.266 -+        xkb->symbol_names[i] = NULL;
   2.267 -+    }
   2.268 - 
   2.269 -     /* Allocate a keyboard description structure. */
   2.270 -+    int status = False;
   2.271 -     XkbDescRec * kbd_desc_ptr = XkbAllocKeyboard();
   2.272 -     if (kbd_desc_ptr == NULL)
   2.273 -     {
   2.274 -         ERR("Failed to get keyboard description\n");
   2.275 -         goto HastaLaVista;
   2.276 -     }
   2.277 --    kbd_desc_ptr->dpy = xkb->dsp;
   2.278 - 
   2.279 -     /* Fetch information into the keyboard description. */
   2.280 --    XkbGetControls(xkb->dsp, XkbAllControlsMask, kbd_desc_ptr);
   2.281 --    XkbGetNames(xkb->dsp, XkbSymbolsNameMask, kbd_desc_ptr);
   2.282 --    XkbGetNames(xkb->dsp, XkbGroupNamesMask, kbd_desc_ptr);
   2.283 -+    XkbGetControls(GDK_DISPLAY(), XkbAllControlsMask, kbd_desc_ptr);
   2.284 -+    XkbGetNames(GDK_DISPLAY(), XkbSymbolsNameMask, kbd_desc_ptr);
   2.285 -+    XkbGetNames(GDK_DISPLAY(), XkbGroupNamesMask, kbd_desc_ptr);
   2.286 - 
   2.287 -     if (kbd_desc_ptr->names == NULL)
   2.288 -     {
   2.289 -@@ -137,12 +151,11 @@ static int do_init_xkb(XkbPlugin * xkb)
   2.290 - 
   2.291 -     /* Determine the group names.  Trim off text beginning at a '('. */
   2.292 -     const Atom * tmp_group_source = kbd_desc_ptr->names->groups;
   2.293 --    int i;
   2.294 -     for (i = 0; i < xkb->group_count; i++)
   2.295 -     {
   2.296 -         if (tmp_group_source[i] != None)
   2.297 -         {
   2.298 --            char * ptr = XGetAtomName(xkb->dsp, tmp_group_source[i]);
   2.299 -+            char * ptr = XGetAtomName(GDK_DISPLAY(), tmp_group_source[i]);
   2.300 -             xkb->group_names[i] = ptr;
   2.301 -             if ((ptr != NULL) && ((ptr = strchr(ptr, '('))) != NULL)
   2.302 -                 *ptr = '\0';
   2.303 -@@ -153,7 +166,7 @@ static int do_init_xkb(XkbPlugin * xkb)
   2.304 -     Atom sym_name_atom = kbd_desc_ptr->names->symbols;
   2.305 -     char * sym_name;
   2.306 -     if ((sym_name_atom == None)
   2.307 --    || ((sym_name = XGetAtomName(xkb->dsp, sym_name_atom)) == NULL))
   2.308 -+    || ((sym_name = XGetAtomName(GDK_DISPLAY(), sym_name_atom)) == NULL))
   2.309 -         goto HastaLaVista;
   2.310 - 
   2.311 -     /* Parse and store symbol names. */
   2.312 -@@ -190,83 +203,106 @@ static int do_init_xkb(XkbPlugin * xkb)
   2.313 -     {
   2.314 -         xkb->group_count = 2;
   2.315 -         xkb->symbol_names[1] = xkb->symbol_names[0];
   2.316 --        xkb->symbol_names[0] = strdup("us");
   2.317 --        xkb->group_names[0] = strdup("US/ASCII");
   2.318 --        xkb->group_names[1] = strdup("Japanese");
   2.319 -+        xkb->symbol_names[0] = g_strdup("us");
   2.320 -+        xkb->group_names[0] = g_strdup("US/ASCII");
   2.321 -+        xkb->group_names[1] = g_strdup("Japanese");
   2.322 -     }
   2.323 -     else if (count < xkb->group_count)
   2.324 -     {
   2.325 -         /* Ensure that the names are fully initialized. */
   2.326 -         int j = count, k = xkb->group_count;
   2.327 -         while(--j >= 0) xkb->symbol_names[--k] = xkb->symbol_names[j];
   2.328 --        while(--k >= 0) xkb->symbol_names[k] = strdup("en_US");
   2.329 -+        while(--k >= 0) xkb->symbol_names[k] = g_strdup("en_US");
   2.330 -     }
   2.331 - 
   2.332 --    /* Enxure that the names are fully initialized. */
   2.333 -+    /* Ensure that the names are fully initialized. */
   2.334 -     for (i = 0; i < xkb->group_count; i++)
   2.335 -     {
   2.336 -         if (xkb->symbol_names[i] == NULL)
   2.337 -         {
   2.338 -             ERR("\nGroup Symbol %i is undefined, set to 'U/A' !\n", i+1);
   2.339 --            xkb->symbol_names[i] = strdup("U/A");
   2.340 -+            xkb->symbol_names[i] = g_strdup("U/A");
   2.341 -         }
   2.342 -     }
   2.343 - 
   2.344 -+    /* Create or recreate hash table.
   2.345 -+     * The layout that was associated to the windows may or may not be at the same group number,
   2.346 -+     * and worse, may no longer exist, which there is no meaningful way to deal with. */
   2.347 -+    if (xkb->group_hash_table != NULL)
   2.348 -+        g_hash_table_destroy(xkb->group_hash_table);
   2.349 -+    xkb->group_hash_table = g_hash_table_new(g_direct_hash, NULL);
   2.350 -+
   2.351 -     status = True;
   2.352 - 
   2.353 - HastaLaVista:
   2.354 -     if (kbd_desc_ptr != NULL)
   2.355 -         XkbFreeKeyboard(kbd_desc_ptr, 0, True);
   2.356 -+
   2.357 -     return status;
   2.358 - }
   2.359 - 
   2.360 -+/* GDK event filter that receives events from all windows and the Xkb extension. */
   2.361 -+static GdkFilterReturn xkb_event_filter(GdkXEvent * xevent, GdkEvent * event, XkbPlugin * xkb)
   2.362 -+{
   2.363 -+    XEvent * ev = (XEvent *) xevent;
   2.364 -+
   2.365 -+    if (ev->xany.type == xkb->base_event_code + XkbEventCode)
   2.366 -+    {
   2.367 -+        /* Xkb event. */
   2.368 -+        XkbEvent * xkbev = (XkbEvent *) ev;
   2.369 -+        if (xkbev->any.xkb_type == XkbNewKeyboardNotify)
   2.370 -+        {
   2.371 -+            initialize_keyboard_description(xkb);
   2.372 -+            refresh_group_xkb(xkb);
   2.373 -+            xkb_redraw(xkb);
   2.374 -+            xkb_enter_locale_by_process(xkb);
   2.375 -+        }
   2.376 -+        else if (xkbev->any.xkb_type == XkbStateNotify)
   2.377 -+        {
   2.378 -+            if (xkbev->state.group != xkb->current_group_xkb_no)
   2.379 -+            {
   2.380 -+                /* Switch to the new group and redraw the display. */
   2.381 -+                xkb->current_group_xkb_no = xkbev->state.group;
   2.382 -+                refresh_group_xkb(xkb);
   2.383 -+                xkb_redraw(xkb);
   2.384 -+                xkb_enter_locale_by_process(xkb);
   2.385 -+            }
   2.386 -+        }
   2.387 -+    }
   2.388 -+    return GDK_FILTER_CONTINUE;
   2.389 -+}
   2.390 -+
   2.391 - /* Initialize the Xkb interface. */
   2.392 - void xkb_mechanism_constructor(XkbPlugin * xkb)
   2.393 - {
   2.394 --    /* Enable the Xkb extension on all clients. */
   2.395 --    XkbIgnoreExtension(False);
   2.396 --
   2.397 --    /* Open the display. */
   2.398 --    int major = XkbMajorVersion;
   2.399 --    int minor = XkbMinorVersion;
   2.400 --    char * display_name = "";
   2.401 --    int event_code;
   2.402 --    int error_rtrn;
   2.403 --    int reason_rtrn;
   2.404 --    xkb->dsp = XkbOpenDisplay(display_name, &event_code, &error_rtrn, &major, &minor, &reason_rtrn);
   2.405 --
   2.406 --    switch (reason_rtrn)
   2.407 -+    /* Initialize Xkb extension. */
   2.408 -+    int opcode;
   2.409 -+    int maj = XkbMajorVersion;
   2.410 -+    int min = XkbMinorVersion;
   2.411 -+    if ((XkbLibraryVersion(&maj, &min))
   2.412 -+    && (XkbQueryExtension(GDK_DISPLAY(), &opcode, &xkb->base_event_code, &xkb->base_error_code, &maj, &min)))
   2.413 -     {
   2.414 --        case XkbOD_BadLibraryVersion:
   2.415 --            ERR("Bad XKB library version.\n");
   2.416 --            return;
   2.417 --        case XkbOD_ConnectionRefused:
   2.418 --            ERR("Connection to X server refused.\n");
   2.419 --            return;
   2.420 --        case XkbOD_BadServerVersion:
   2.421 --            ERR("Bad X server version.\n");
   2.422 --            return;
   2.423 --        case XkbOD_NonXkbServer:
   2.424 --            ERR("XKB not present.\n");
   2.425 --            return;
   2.426 --        case XkbOD_Success:
   2.427 --            break;
   2.428 --    }
   2.429 -+        /* Read the keyboard description. */
   2.430 -+        initialize_keyboard_description(xkb);
   2.431 - 
   2.432 --    /* Initialize our mechanism. */
   2.433 --    if (do_init_xkb(xkb) != True)
   2.434 --        return;
   2.435 -+        /* Establish GDK event filter. */
   2.436 -+        gdk_window_add_filter(NULL, (GdkFilterFunc) xkb_event_filter, (gpointer) xkb);
   2.437 - 
   2.438 --    /* Specify events we will receive. */
   2.439 --    XkbSelectEventDetails(xkb->dsp, xkb->device_id, XkbStateNotify, XkbAllStateComponentsMask, XkbGroupStateMask);
   2.440 -+        /* Specify events we will receive. */
   2.441 -+        XkbSelectEvents(GDK_DISPLAY(), XkbUseCoreKbd, XkbNewKeyboardNotifyMask, XkbNewKeyboardNotifyMask);
   2.442 -+        XkbSelectEventDetails(GDK_DISPLAY(), XkbUseCoreKbd, XkbStateNotify, XkbAllStateComponentsMask, XkbGroupStateMask);
   2.443 - 
   2.444 --    /* Get current state. */
   2.445 --    refresh_group_xkb(xkb);
   2.446 -+        /* Get current state. */
   2.447 -+        refresh_group_xkb(xkb);
   2.448 -+    }
   2.449 - }
   2.450 - 
   2.451 - /* Deallocate resources associated with Xkb interface. */
   2.452 - void xkb_mechanism_destructor(XkbPlugin * xkb) 
   2.453 - {
   2.454 -+    /* Remove event filter. */
   2.455 -+    gdk_window_remove_filter(NULL, (GdkFilterFunc) xkb_event_filter, xkb);
   2.456 -+
   2.457 -     /* Free group and symbol name memory. */
   2.458 -     int i;
   2.459 -     for (i = 0; i < xkb->group_count; i++)
   2.460 -@@ -283,21 +319,11 @@ void xkb_mechanism_destructor(XkbPlugin * xkb)
   2.461 -         }
   2.462 -     }
   2.463 - 
   2.464 --    /* Close the display. */
   2.465 --    XCloseDisplay(xkb->dsp);
   2.466 --    xkb->dsp = NULL;
   2.467 --
   2.468 -     /* Destroy the hash table. */
   2.469 -     g_hash_table_destroy(xkb->group_hash_table);
   2.470 -     xkb->group_hash_table = NULL;
   2.471 - }
   2.472 - 
   2.473 --/* Return the connection number for the display. */
   2.474 --int xkb_get_connection_number(XkbPlugin * xkb)
   2.475 --{
   2.476 --    return ConnectionNumber(xkb->dsp);
   2.477 --}
   2.478 --
   2.479 - /* Set the layout to the next layout. */
   2.480 - int xkb_change_group(XkbPlugin * xkb, int increment) 
   2.481 - {
   2.482 -@@ -307,33 +333,13 @@ int xkb_change_group(XkbPlugin * xkb, int increment)
   2.483 -     if (next_group >= xkb->group_count) next_group = 0;
   2.484 - 
   2.485 -     /* Execute the change. */
   2.486 --    XkbLockGroup(xkb->dsp, xkb->device_id, next_group);
   2.487 -+    XkbLockGroup(GDK_DISPLAY(), XkbUseCoreKbd, next_group);
   2.488 -     refresh_group_xkb(xkb);
   2.489 -     xkb_redraw(xkb);
   2.490 -     xkb_enter_locale_by_process(xkb);
   2.491 -     return 1;
   2.492 - }
   2.493 - 
   2.494 --/* Callback when activity detected on the Xkb channel. */
   2.495 --gboolean xkb_gio_callback(GIOChannel * source, GIOCondition condition, gpointer data) 
   2.496 --{
   2.497 --    XkbPlugin * xkb = (XkbPlugin *) data;
   2.498 --
   2.499 --    XkbEvent evnt;
   2.500 --    XNextEvent(xkb->dsp, &evnt.core);
   2.501 --    if ((evnt.type == xkb->base_event_code)
   2.502 --    && (evnt.any.xkb_type == XkbStateNotify)
   2.503 --    && (evnt.state.group != xkb->current_group_xkb_no))
   2.504 --    {
   2.505 --        /* Switch to the new group and redraw the display. */
   2.506 --        xkb->current_group_xkb_no = evnt.state.group;
   2.507 --        refresh_group_xkb(xkb);
   2.508 --        xkb_redraw(xkb);
   2.509 --        xkb_enter_locale_by_process(xkb);
   2.510 --    }
   2.511 --    return TRUE;
   2.512 --}
   2.513 --
   2.514 - /* React to change of focus by switching to the application's layout or the default layout. */
   2.515 - void xkb_active_window_changed(XkbPlugin * xkb, gint pid)
   2.516 - {
   2.517 -@@ -345,7 +351,7 @@ void xkb_active_window_changed(XkbPlugin * xkb, gint pid)
   2.518 - 
   2.519 -     if (new_group_xkb_no < xkb->group_count)
   2.520 -     {
   2.521 --        XkbLockGroup(xkb->dsp, xkb->device_id, new_group_xkb_no);
   2.522 -+        XkbLockGroup(GDK_DISPLAY(), XkbUseCoreKbd, new_group_xkb_no);
   2.523 -         refresh_group_xkb(xkb);
   2.524 -     }
   2.525 - }
   2.526 -diff --git a/src/plugins/xkb/xkb.h b/src/plugins/xkb/xkb.h
   2.527 -index 9265198..20c7ed3 100644
   2.528 ---- a/src/plugins/xkb/xkb.h
   2.529 -+++ b/src/plugins/xkb/xkb.h
   2.530 -@@ -49,10 +49,8 @@ typedef struct {
   2.531 -     GtkWidget * per_app_default_layout_menu;	/* Combo box of all available layouts */
   2.532 - 
   2.533 -     /* Mechanism. */
   2.534 --    Display * dsp;				/* Handle to X display */
   2.535 -     int base_event_code;			/* Result of initializing Xkb extension */
   2.536 -     int base_error_code;
   2.537 --    int device_id;				/* Keyboard device ID (always "core keyboard") */
   2.538 -     int current_group_xkb_no;			/* Current layout */
   2.539 -     int group_count;				/* Count of groups as returned by Xkb */
   2.540 -     char * group_names[XkbNumKbdGroups];	/* Group names as returned by Xkb */
   2.541 -@@ -67,12 +65,11 @@ extern int xkb_get_current_group_xkb_no(XkbPlugin * xkb);
   2.542 - extern int xkb_get_group_count(XkbPlugin * xkb);
   2.543 - extern const char * xkb_get_symbol_name_by_res_no(XkbPlugin * xkb, int group_res_no);
   2.544 - extern const char * xkb_get_current_group_name(XkbPlugin * xkb);
   2.545 --extern const char * xkb_get_current_group_name_lowercase(XkbPlugin * xkb);
   2.546 -+extern const char * xkb_get_current_symbol_name(XkbPlugin * xkb);
   2.547 -+extern const char * xkb_get_current_symbol_name_lowercase(XkbPlugin * xkb);
   2.548 - extern void xkb_mechanism_constructor(XkbPlugin * xkb);
   2.549 - extern void xkb_mechanism_destructor(XkbPlugin * xkb);
   2.550 --extern int xkb_get_connection_number(XkbPlugin * xkb);
   2.551 - extern int xkb_change_group(XkbPlugin * xkb, int increment);
   2.552 --extern gboolean xkb_gio_callback(GIOChannel * source, GIOCondition condition, gpointer data);
   2.553 - extern void xkb_active_window_changed(XkbPlugin * xkb, GPid pid);
   2.554 - 
   2.555 - #endif
   2.556 --- 
   2.557 -1.7.0
   2.558 -
     3.1 --- a/lxpanel/stuff/configure_desktop_number.patch	Thu Mar 01 07:31:38 2012 -0800
     3.2 +++ b/lxpanel/stuff/configure_desktop_number.patch	Thu Mar 01 17:05:30 2012 +0100
     3.3 @@ -20,7 +20,7 @@
     3.4  +    {
     3.5  +        if (g_find_program_in_path("obconf"))
     3.6  +        {
     3.7 -+            command_line = "obconf --tab 6";
     3.8 ++            command_line = "obconf";
     3.9  +        }
    3.10  +    }
    3.11  +    else if (g_strcmp0(wm_name, "compiz") == 0)
     4.1 --- a/lxpanel/stuff/cpu-color.patch	Thu Mar 01 07:31:38 2012 -0800
     4.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.3 @@ -1,11 +0,0 @@
     4.4 ---- src/plugins/cpu/cpu.c
     4.5 -+++ src/plugins/cpu/cpu.c.taz
     4.6 -@@ -229,7 +229,7 @@
     4.7 -     /* Clone a graphics context and set "green" as its foreground color.
     4.8 -      * We will use this to draw the graph. */
     4.9 -     c->graphics_context = gdk_gc_new(p->panel->topgwin->window);
    4.10 --    gdk_color_parse("green",  &c->foreground_color);
    4.11 -+    gdk_color_parse("#cfcfcf",  &c->foreground_color);
    4.12 -     gdk_colormap_alloc_color(gdk_drawable_get_colormap(p->panel->topgwin->window), &c->foreground_color, FALSE, TRUE);
    4.13 -     gdk_gc_set_foreground(c->graphics_context, &c->foreground_color);
    4.14 - 
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/lxpanel/stuff/cpu-size-color.patch	Thu Mar 01 17:05:30 2012 +0100
     5.3 @@ -0,0 +1,19 @@
     5.4 +--- src/plugins/cpu/cpu.c
     5.5 ++++ src/plugins/cpu/cpu.c.taz
     5.6 +@@ -222,14 +222,14 @@
     5.7 + 
     5.8 +     /* Allocate drawing area as a child of top level widget.  Enable button press events. */
     5.9 +     c->da = gtk_drawing_area_new();
    5.10 +-    gtk_widget_set_size_request(c->da, 40, PANEL_HEIGHT_DEFAULT);
    5.11 ++    gtk_widget_set_size_request(c->da, 26, PANEL_HEIGHT_DEFAULT);
    5.12 +     gtk_widget_add_events(c->da, GDK_BUTTON_PRESS_MASK);
    5.13 +     gtk_container_add(GTK_CONTAINER(p->pwid), c->da);
    5.14 + 
    5.15 +     /* Clone a graphics context and set "green" as its foreground color.
    5.16 +      * We will use this to draw the graph. */
    5.17 +     c->graphics_context = gdk_gc_new(p->panel->topgwin->window);
    5.18 +-    gdk_color_parse("green",  &c->foreground_color);
    5.19 ++    gdk_color_parse("#cfcfcf",  &c->foreground_color);
    5.20 +     gdk_colormap_alloc_color(gdk_drawable_get_colormap(p->panel->topgwin->window), &c->foreground_color, FALSE, TRUE);
    5.21 +     gdk_gc_set_foreground(c->graphics_context, &c->foreground_color);
    5.22 + 
     6.1 --- a/lxpanel/stuff/fr.patch	Thu Mar 01 07:31:38 2012 -0800
     6.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.3 @@ -1,29 +0,0 @@
     6.4 ---- po/fr.po	Sun Apr 20 14:13:34 2008
     6.5 -+++ po/fr.po	Sun Apr 20 14:15:33 2008
     6.6 -@@ -390,7 +390,7 @@
     6.7 - 
     6.8 - #: ../src/plugins/ptk-app-menu.c:157
     6.9 - msgid "Other"
    6.10 --msgstr "Autres"
    6.11 -+msgstr "Divers"
    6.12 - 
    6.13 - #: ../src/plugins/ptk-app-menu.c:158
    6.14 - msgid "Game"
    6.15 -@@ -406,7 +406,7 @@
    6.16 - 
    6.17 - #: ../src/plugins/ptk-app-menu.c:161
    6.18 - msgid "Audio & Video"
    6.19 --msgstr "Audio & Vidéo"
    6.20 -+msgstr "Multimedia"
    6.21 - 
    6.22 - #: ../src/plugins/ptk-app-menu.c:162
    6.23 - msgid "Graphics"
    6.24 -@@ -430,7 +430,7 @@
    6.25 - 
    6.26 - #: ../src/plugins/ptk-app-menu.c:167
    6.27 - msgid "Accessories"
    6.28 --msgstr "Accessoires"
    6.29 -+msgstr "Utilitaires"
    6.30 - 
    6.31 - #: ../src/plugins/taskbar.c:1224
    6.32 - msgid "Raise"
     7.1 --- a/lxpanel/stuff/ptk-app-menu.patch	Thu Mar 01 07:31:38 2012 -0800
     7.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.3 @@ -1,23 +0,0 @@
     7.4 ---- src/plugins/ptk-app-menu.c	Fri Apr 18 15:16:04 2008
     7.5 -+++ src/plugins/ptk-app-menu.c	Fri Apr 18 15:15:02 2008
     7.6 -@@ -154,17 +154,17 @@
     7.7 - 
     7.8 - static const CatInfo known_cats[]=
     7.9 - {
    7.10 --    {N_("Other"), "Other", "gnome-other", NULL},
    7.11 -+    {N_("Other"), "Misc", "gnome-other", NULL},
    7.12 -     {N_("Game"), "Games", "gnome-joystick", game_cats},
    7.13 -     {N_("Education"), "Education", "gnome-amusements", education_cats},
    7.14 -     {N_("Development"), "Development", "gnome-devel", development_cats},
    7.15 -     {N_("Audio & Video"), "Multimedia", "gnome-multimedia", audiovideo_cats},
    7.16 -     {N_("Graphics"), "Graphics", "gnome-graphics", graphics_cats},
    7.17 -     {N_("Settings"), "Settings", "gnome-settings", settings_cats},
    7.18 --    {N_("System Tools"), "System-Tools", "gnome-system", system_cats},
    7.19 -+    {N_("System Tools"), "System Tools", "gnome-system", system_cats},
    7.20 -     {N_("Network"), "Internet", "gnome-globe", network_cats},
    7.21 -     {N_("Office"), "Office", "gnome-applications", office_cats},
    7.22 --    {N_("Accessories"), "Accessories", "gnome-util", utility_cats}
    7.23 -+    {N_("Accessories"), "Utilities", "gnome-util", utility_cats}
    7.24 - };
    7.25 - 
    7.26 - static int find_cat( char** cats )