summaryrefslogtreecommitdiff
path: root/charpick/charpick.c
diff options
context:
space:
mode:
Diffstat (limited to 'charpick/charpick.c')
-rw-r--r--charpick/charpick.c75
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)