Your message dated Thu, 7 Oct 2010 23:54:51 +0200 with message-id <20101007215451.GI2854@radis.liafa.jussieu.fr> and subject line Re: Bug#598864: unblock: libgnomekbd/2.30.2-1 has caused the Debian Bug report #598864, regarding unblock: libgnomekbd/2.30.2-1 to be marked as done. This means that you claim that the problem has been dealt with. If this is not the case it is now your responsibility to reopen the Bug report if necessary, and/or fix the problem forthwith. (NB: If you are a system administrator and have no idea what this message is talking about, this may indicate a serious mail system misconfiguration somewhere. Please contact owner@bugs.debian.org immediately.) -- 598864: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=598864 Debian Bug Tracking System Contact owner@bugs.debian.org with problems
--- Begin Message ---
- To: submit@bugs.debian.org
- Subject: unblock: libgnomekbd/2.30.2-1
- From: Josselin Mouette <joss@debian.org>
- Date: Sat, 02 Oct 2010 19:13:40 +0200
- Message-id: <[🔎] 1286039620.6455.94.camel@tomoyo>
Package: release.debian.org Severity: normal User: release.debian.org@packages.debian.org Usertags: freeze-exception Hi, please unblock libgnomekbd for squeeze. libgnomekbd (2.30.2-1) unstable; urgency=low * New upstream translation and bugfix release. * Switch to 3.0 source format. * 02_layout_crash.patch: dropped, merged upstream. Upstream changes: A couple of translations updated Proper location in NA is provided (using the icon name) Fixed three crashers Attached are the upstream code changes. Cheers, -- .''`. Josselin Mouette : :' : `. `' “If you behave this way because you are blackmailed by someone, `- […] I will see what I can do for you.” -- Jörg Schilling--- libgnomekbd-2.30.1/libgnomekbd/gkbd-indicator.c 2010-03-28 22:27:04.000000000 +0000 +++ libgnomekbd-2.30.2/libgnomekbd/gkbd-indicator.c 2010-05-05 21:59:51.000000000 +0000 @@ -318,7 +318,7 @@ gchar ** short_group_names, gchar ** full_group_names) { - char *layout_name; + char *layout_name = NULL; if (group < g_strv_length (short_group_names)) { if (xkl_engine_get_features (engine) & XKLF_MULTIPLE_LAYOUTS_SUPPORTED) { @@ -352,7 +352,7 @@ } if (layout_name == NULL) - layout_name = g_strdup ("??"); + layout_name = g_strdup (""); return layout_name; } --- libgnomekbd-2.30.1/libgnomekbd/gkbd-keyboard-drawing.c 2010-03-28 22:14:54.000000000 +0000 +++ libgnomekbd-2.30.2/libgnomekbd/gkbd-keyboard-drawing.c 2010-06-22 20:33:23.000000000 +0000 @@ -1293,14 +1293,19 @@ (GFunc) draw_keyboard_item, &data); } -static void +static gboolean create_cairo (GkbdKeyboardDrawing * drawing) { - GtkStateType state = gtk_widget_get_state (GTK_WIDGET (drawing)); + GtkStateType state; + if (drawing == NULL || drawing->pixmap == NULL) + return FALSE; drawing->renderContext->cr = gdk_cairo_create (GDK_DRAWABLE (drawing->pixmap)); + + state = gtk_widget_get_state (GTK_WIDGET (drawing)); drawing->renderContext->dark_color = >k_widget_get_style (GTK_WIDGET (drawing))->dark[state]; + return TRUE; } static void @@ -1333,9 +1338,10 @@ [state], TRUE, 0, 0, allocation.width, allocation.height); - create_cairo (drawing); - draw_keyboard_to_context (drawing->renderContext, drawing); - destroy_cairo (drawing); + if (create_cairo (drawing)) { + draw_keyboard_to_context (drawing->renderContext, drawing); + destroy_cairo (drawing); + } } static void @@ -1498,10 +1504,12 @@ key->pressed = (event->type == GDK_KEY_PRESS); - create_cairo (drawing); - draw_key (drawing->renderContext, drawing, key); - redraw_overlapping_doodads (drawing->renderContext, drawing, key); - destroy_cairo (drawing); + if (create_cairo (drawing)) { + draw_key (drawing->renderContext, drawing, key); + redraw_overlapping_doodads (drawing->renderContext, + drawing, key); + destroy_cairo (drawing); + } invalidate_key_region (drawing, key); return FALSE; @@ -1526,16 +1534,18 @@ if (!drawing->xkb) return FALSE; - create_cairo (drawing); - for (i = drawing->xkb->min_key_code; - i <= drawing->xkb->max_key_code; i++) - if (drawing->keys[i].pressed) { - drawing->keys[i].pressed = FALSE; - draw_key (drawing->renderContext, drawing, - drawing->keys + i); - invalidate_key_region (drawing, drawing->keys + i); - } - destroy_cairo (drawing); + if (create_cairo (drawing)) { + for (i = drawing->xkb->min_key_code; + i <= drawing->xkb->max_key_code; i++) + if (drawing->keys[i].pressed) { + drawing->keys[i].pressed = FALSE; + draw_key (drawing->renderContext, drawing, + drawing->keys + i); + invalidate_key_region (drawing, + drawing->keys + i); + } + destroy_cairo (drawing); + } return FALSE; } @@ -1838,6 +1848,39 @@ drawing->xkb->max_key_code + 1); } +static void +process_indicators_state_notify (XkbIndicatorNotifyEvent * iev, + GkbdKeyboardDrawing * drawing) +{ + /* Good question: should we track indicators when the keyboard is + NOT really taken from the screen */ + gint i; + + for (i = 0; i <= drawing->xkb->indicators->phys_indicators; i++) + if (drawing->physical_indicators[i] != NULL + && (iev->changed & 1 << i)) { + gint state = (iev->state & 1 << i) != FALSE; + + if ((state && !drawing->physical_indicators[i]->on) + || (!state + && drawing->physical_indicators[i]->on)) { + drawing->physical_indicators[i]->on = + state; + if (create_cairo (drawing)) { + draw_doodad (drawing-> + renderContext, + drawing, + drawing->physical_indicators + [i]); + destroy_cairo (drawing); + } + invalidate_indicator_doodad_region + (drawing, + drawing->physical_indicators[i]); + } + } +} + static GdkFilterReturn xkb_state_notify_event_filter (GdkXEvent * gdkxev, GdkEvent * event, @@ -1879,49 +1922,11 @@ case XkbIndicatorStateNotify: { - /* Good question: should we track indicators when the keyboard is - NOT really taken from the screen */ - XkbIndicatorNotifyEvent *iev = - &((XkbEvent *) gdkxev)->indicators; - gint i; - - for (i = 0; - i <= - drawing->xkb-> - indicators->phys_indicators; i++) - if (drawing->physical_indicators[i] - != NULL - && (iev->changed & 1 << i)) { - gint state = - (iev->state & 1 << i) - != FALSE; - - if ((state - && - !drawing->physical_indicators - [i]->on) || (!state - && - drawing->physical_indicators - [i]->on)) - { - drawing->physical_indicators - [i]->on = - state; - create_cairo - (drawing); - draw_doodad - (drawing->renderContext, - drawing, - drawing->physical_indicators - [i]); - destroy_cairo - (drawing); - invalidate_indicator_doodad_region - (drawing, - drawing->physical_indicators - [i]); - } - } + process_indicators_state_notify (& + ((XkbEvent + *) + gdkxev)->indicators, +drawing); } break; --- libgnomekbd-2.30.1/libgnomekbd/gkbd-status.c 2010-04-17 01:09:30.000000000 +0000 +++ libgnomekbd-2.30.2/libgnomekbd/gkbd-status.c 2010-06-22 20:35:03.000000000 +0000 @@ -53,8 +53,17 @@ gulong config_changed_handler; } gki_globals; +static gchar *settings_signal_names[] = { + "notify::gtk-theme-name", + "notify::gtk-key-theme-name", + "notify::gtk-font-name", + "notify::font-options", +}; + struct _GkbdStatusPrivate { gdouble angle; + gulong settings_signal_handlers[sizeof (settings_signal_names) / + sizeof (settings_signal_names[0])]; }; /* one instance for ALL widgets */ @@ -81,9 +90,9 @@ static void gkbd_status_set_current_page (GkbdStatus * gki); static void -gkbd_status_cleanup (GkbdStatus * gki); +gkbd_status_global_cleanup (GkbdStatus * gki); static void -gkbd_status_fill (GkbdStatus * gki); +gkbd_status_global_fill (GkbdStatus * gki); static void gkbd_status_set_tooltips (GkbdStatus * gki, const char *str); @@ -96,7 +105,7 @@ } void -gkbd_status_cleanup (GkbdStatus * gki) +gkbd_status_global_cleanup (GkbdStatus * gki) { while (globals.icons) { if (globals.icons->data) @@ -107,7 +116,7 @@ } void -gkbd_status_fill (GkbdStatus * gki) +gkbd_status_global_fill (GkbdStatus * gki) { int grp; int total_groups = xkl_engine_get_num_groups (globals.engine); @@ -152,6 +161,7 @@ cairo_font_options_t *fo; static GHashTable *ln2cnt_map = NULL; + xkl_debug (160, "Rendering cairo for group %d\n", group); if (globals.ind_cfg.background_color != NULL && globals.ind_cfg.background_color[0] != 0) { if (sscanf @@ -400,8 +410,8 @@ void gkbd_status_reinit_ui (GkbdStatus * gki) { - gkbd_status_cleanup (gki); - gkbd_status_fill (gki); + gkbd_status_global_cleanup (gki); + gkbd_status_global_fill (gki); gkbd_status_set_current_page (gki); } @@ -626,11 +636,16 @@ static void gkbd_status_init (GkbdStatus * gki) { + int i; + if (!g_slist_length (globals.widget_instances)) gkbd_status_global_init (); gki->priv = g_new0 (GkbdStatusPrivate, 1); + /* This should give NA a hint about the order */ + gtk_status_icon_set_name (GTK_STATUS_ICON (gki), "keyboard"); + xkl_debug (100, "Initiating the widget startup process for %p\n", gki); @@ -642,7 +657,7 @@ gkbd_status_set_tooltips (gki, NULL); - gkbd_status_fill (gki); + gkbd_status_global_fill (gki); gkbd_status_set_current_page (gki); /* append AFTER all initialization work is finished */ @@ -654,37 +669,37 @@ g_signal_connect (gki, "activate", G_CALLBACK (gkbd_status_activate), NULL); - g_signal_connect_after (gtk_settings_get_default (), - "notify::gtk-theme-name", - G_CALLBACK (gkbd_status_theme_changed), - gki); - g_signal_connect_after (gtk_settings_get_default (), - "notify::gtk-key-theme-name", - G_CALLBACK (gkbd_status_theme_changed), - gki); - g_signal_connect_after (gtk_settings_get_default (), - "notify::gtk-font-name", - G_CALLBACK (gkbd_status_theme_changed), - gki); - g_signal_connect_after (gdk_screen_get_default (), - "notify::font-options", - G_CALLBACK (gkbd_status_theme_changed), - gki); + for (i = sizeof (settings_signal_names) / + sizeof (settings_signal_names[0]); --i >= 0;) + gki->priv->settings_signal_handlers[i] = + g_signal_connect_after (gtk_settings_get_default (), + settings_signal_names[i], + G_CALLBACK + (gkbd_status_theme_changed), + gki); } static void gkbd_status_finalize (GObject * obj) { + int i; GkbdStatus *gki = GKBD_STATUS (obj); xkl_debug (100, "Starting the gnome-kbd-status widget shutdown process for %p\n", gki); + for (i = sizeof (settings_signal_names) / + sizeof (settings_signal_names[0]); --i >= 0;) + g_signal_handler_disconnect (gtk_settings_get_default (), + gki-> + priv->settings_signal_handlers + [i]); + /* remove BEFORE all termination work is finished */ globals.widget_instances = g_slist_remove (globals.widget_instances, gki); - gkbd_status_cleanup (gki); + gkbd_status_global_cleanup (gki); xkl_debug (100, "The instance of gnome-kbd-status successfully finalized\n");Attachment: signature.asc
Description: This is a digitally signed message part
--- End Message ---
--- Begin Message ---
- To: Josselin Mouette <joss@debian.org>, 598864-done@bugs.debian.org
- Subject: Re: Bug#598864: unblock: libgnomekbd/2.30.2-1
- From: Julien Cristau <jcristau@debian.org>
- Date: Thu, 7 Oct 2010 23:54:51 +0200
- Message-id: <20101007215451.GI2854@radis.liafa.jussieu.fr>
- In-reply-to: <[🔎] 1286039620.6455.94.camel@tomoyo>
- References: <[🔎] 1286039620.6455.94.camel@tomoyo>
On Sat, Oct 2, 2010 at 19:13:40 +0200, Josselin Mouette wrote: > libgnomekbd (2.30.2-1) unstable; urgency=low > Not very happy with the 3.0 switch. Oh well. Unblocked, thanks. Cheers, JulienAttachment: signature.asc
Description: Digital signature
--- End Message ---