diff options
Diffstat (limited to 'charpick/charpick.c')
-rw-r--r-- | charpick/charpick.c | 75 |
1 files changed, 56 insertions, 19 deletions
diff --git a/charpick/charpick.c b/charpick/charpick.c index 6f03e6b6..932c6919 100644 --- a/charpick/charpick.c +++ b/charpick/charpick.c @@ -15,7 +15,6 @@ /* The comment for each char list has the html entity names of the chars */ /* All gunicar codes should end in 0 */ - /* This is the default list used when starting charpick the first time */ /* aacute, agrave, eacute, iacute, oacute, frac12, copy*/ /* static const gchar *def_list = "áàéíñóœ©"; */ @@ -169,10 +168,10 @@ toggle_button_toggled_cb (GtkToggleButton *button, unichar = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button), "unichar")); curr_data->selected_unichar = unichar; /* set this? widget as the selection owner */ - gtk_selection_owner_set (curr_data->applet, + gtk_selection_owner_set (curr_data->invisible, GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME); - gtk_selection_owner_set (curr_data->applet, + gtk_selection_owner_set (curr_data->invisible, GDK_SELECTION_CLIPBOARD, GDK_CURRENT_TIME); curr_data->last_index = button_index; @@ -443,12 +442,12 @@ build_table (charpick_data *p_curr_data) G_CALLBACK (chooser_button_clicked), p_curr_data); - g_signal_connect (button, "button_press_event", + g_signal_connect (button, "button-press-event", G_CALLBACK (button_press_hack), p_curr_data->applet); } - charlist = g_strdup (p_curr_data->charlist); + charlist = p_curr_data->charlist; for (i = 0; i < len; i++) { gchar label[7]; GtkRequisition req; @@ -494,7 +493,7 @@ build_table (charpick_data *p_curr_data) G_CALLBACK (toggle_button_toggled_cb), p_curr_data); - g_signal_connect (toggle_button[i], "button_press_event", + g_signal_connect (toggle_button[i], "button-press-event", G_CALLBACK (button_press_hack), p_curr_data->applet); } @@ -547,6 +546,29 @@ build_table (charpick_data *p_curr_data) p_curr_data->last_toggle_button = NULL; } +static gboolean +rebuild_cb (gpointer user_data) +{ + charpick_data *curr_data; + + curr_data = user_data; + curr_data->rebuild_id = 0; + + build_table (curr_data); + + return G_SOURCE_REMOVE; +} + +static void +queue_rebuild (charpick_data *curr_data) +{ + if (curr_data->rebuild_id != 0) + return; + + curr_data->rebuild_id = g_idle_add (rebuild_cb, curr_data); + g_source_set_name_by_id (curr_data->rebuild_id, "[charpick] rebuild_cb"); +} + static void applet_size_allocate (MatePanelApplet *applet, GtkAllocation *allocation, @@ -563,7 +585,7 @@ applet_size_allocate (MatePanelApplet *applet, curr_data->panel_size = allocation->height; } - build_table (curr_data); + queue_rebuild (curr_data); return; } @@ -647,6 +669,12 @@ applet_destroy (GtkWidget *widget, g_return_if_fail (curr_data); + if (curr_data->rebuild_id != 0) + { + g_source_remove (curr_data->rebuild_id); + curr_data->rebuild_id = 0; + } + if (curr_data->about_dialog) gtk_widget_destroy (curr_data->about_dialog); if (curr_data->propwindow) @@ -655,6 +683,8 @@ applet_destroy (GtkWidget *widget, gtk_widget_destroy (curr_data->box); if (curr_data->menu) gtk_widget_destroy (curr_data->menu); + if (curr_data->invisible) + gtk_widget_destroy (curr_data->invisible); g_free (curr_data->charlist); g_free (curr_data); } @@ -729,11 +759,14 @@ charpicker_applet_fill (MatePanelApplet *applet) { MatePanelAppletOrient orientation; charpick_data *curr_data; + GdkScreen *screen; GdkAtom utf8_atom; gchar *string; GtkActionGroup *action_group; +#ifndef ENABLE_IN_PROCESS g_set_application_name (_("Character Palette")); +#endif gtk_window_set_default_icon_name ("accessories-character-map"); @@ -746,6 +779,7 @@ charpicker_applet_fill (MatePanelApplet *applet) curr_data->add_edit_dialog = NULL; curr_data->settings = mate_panel_applet_settings_new (applet, "org.mate.panel.applet.charpick"); + curr_data->rebuild_id = 0; get_chartable (curr_data); @@ -764,34 +798,37 @@ charpicker_applet_fill (MatePanelApplet *applet) || (orientation == MATE_PANEL_APPLET_ORIENT_RIGHT); build_table (curr_data); - g_signal_connect (curr_data->applet, "key_press_event", + g_signal_connect (curr_data->applet, "key-press-event", G_CALLBACK (key_press_event), curr_data); utf8_atom = gdk_atom_intern ("UTF8_STRING", FALSE); - gtk_selection_add_target (curr_data->applet, + screen = gtk_widget_get_screen (GTK_WIDGET (applet)); + curr_data->invisible = gtk_invisible_new_for_screen (screen); + + gtk_selection_add_target (curr_data->invisible, GDK_SELECTION_PRIMARY, utf8_atom, 0); - gtk_selection_add_target (curr_data->applet, + gtk_selection_add_target (curr_data->invisible, GDK_SELECTION_CLIPBOARD, utf8_atom, 0); - g_signal_connect (curr_data->applet, "selection_get", + g_signal_connect (curr_data->invisible, "selection-get", G_CALLBACK (charpick_selection_handler), curr_data); - g_signal_connect (curr_data->applet, "selection_clear_event", + g_signal_connect (curr_data->invisible, "selection-clear-event", G_CALLBACK (selection_clear_cb), curr_data); make_applet_accessible (GTK_WIDGET (applet)); /* session save signal */ - g_signal_connect (applet, "change_orient", + g_signal_connect (applet, "change-orient", G_CALLBACK (applet_change_orient), curr_data); - g_signal_connect (applet, "size_allocate", + g_signal_connect (applet, "size-allocate", G_CALLBACK (applet_size_allocate), curr_data); g_signal_connect (applet, "destroy", @@ -837,9 +874,9 @@ charpicker_applet_factory (MatePanelApplet *applet, return retval; } -MATE_PANEL_APPLET_OUT_PROCESS_FACTORY ("CharpickerAppletFactory", - PANEL_TYPE_APPLET, - "char-palette", - charpicker_applet_factory, - NULL) +PANEL_APPLET_FACTORY ("CharpickerAppletFactory", + PANEL_TYPE_APPLET, + "char-palette", + charpicker_applet_factory, + NULL) |