diff --git a/panels/region/cc-input-row.c b/panels/region/cc-input-row.c
index 341f4c7e5..66d4f01ee 100644
--- a/panels/region/cc-input-row.c
+++ b/panels/region/cc-input-row.c
@@ -26,14 +26,15 @@ struct _CcInputRow
CcInputSource *source;
GtkLabel *name_label;
- GtkWidget *icon_image;
GtkButton *remove_button;
+ GtkButton *settings_button;
};
G_DEFINE_TYPE (CcInputRow, cc_input_row, GTK_TYPE_LIST_BOX_ROW)
enum
{
+ SIGNAL_SHOW_SETTINGS,
SIGNAL_SHOW_LAYOUT,
SIGNAL_REMOVE_ROW,
SIGNAL_LAST
@@ -41,6 +42,14 @@ enum
static guint signals[SIGNAL_LAST] = { 0, };
+static void
+settings_button_clicked_cb (CcInputRow *self)
+{
+ g_signal_emit (self,
+ signals[SIGNAL_SHOW_SETTINGS],
+ 0);
+}
+
static void
layout_button_clicked_cb (CcInputRow *self)
{
@@ -79,11 +88,22 @@ cc_input_row_class_init (CcInputRowClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcInputRow, remove_button);
gtk_widget_class_bind_template_child (widget_class, CcInputRow, name_label);
- gtk_widget_class_bind_template_child (widget_class, CcInputRow, icon_image);
+ gtk_widget_class_bind_template_child (widget_class, CcInputRow, settings_button);
gtk_widget_class_bind_template_callback (widget_class, layout_button_clicked_cb);
+ gtk_widget_class_bind_template_callback (widget_class, settings_button_clicked_cb);
gtk_widget_class_bind_template_callback (widget_class, remove_button_clicked_cb);
+ signals[SIGNAL_SHOW_SETTINGS] =
+ g_signal_new ("show-settings",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ NULL,
+ G_TYPE_NONE,
+ 0);
+
signals[SIGNAL_SHOW_LAYOUT] =
g_signal_new ("show-layout",
G_TYPE_FROM_CLASS (object_class),
@@ -129,7 +149,7 @@ cc_input_row_new (CcInputSource *source)
g_signal_connect_object (source, "label-changed", G_CALLBACK (label_changed_cb), self, G_CONNECT_SWAPPED);
label_changed_cb (self);
- gtk_widget_set_visible (self->icon_image, CC_IS_INPUT_SOURCE_IBUS (source));
+ gtk_widget_set_visible (GTK_WIDGET (self->settings_button), CC_IS_INPUT_SOURCE_IBUS (source));
return self;
}
diff --git a/panels/region/cc-input-row.ui b/panels/region/cc-input-row.ui
index d932ede74..3ba52bace 100644
--- a/panels/region/cc-input-row.ui
+++ b/panels/region/cc-input-row.ui
@@ -17,12 +17,18 @@
-
diff --git a/panels/region/cc-region-panel.c b/panels/region/cc-region-panel.c
index 3a2ee1c68..7d5fbeb8c 100644
--- a/panels/region/cc-region-panel.c
+++ b/panels/region/cc-region-panel.c
@@ -83,7 +83,6 @@ struct _CcRegionPanel {
GtkButton *restart_button;
GtkRevealer *restart_revealer;
GtkRadioButton *same_source;
- GtkButton *show_config_button;
gboolean login;
gboolean login_auto_apply;
@@ -715,6 +714,32 @@ maybe_start_ibus (void)
#endif
+static void
+row_settings_cb (CcRegionPanel *self,
+ CcInputRow *row)
+{
+ CcInputSourceIBus *source;
+ g_autoptr(GdkAppLaunchContext) ctx = NULL;
+ GDesktopAppInfo *app_info;
+ g_autoptr(GError) error = NULL;
+
+ g_return_if_fail (CC_IS_INPUT_SOURCE_IBUS (cc_input_row_get_source (row)));
+ source = CC_INPUT_SOURCE_IBUS (cc_input_row_get_source (row));
+
+ app_info = cc_input_source_ibus_get_app_info (source);
+ if (app_info == NULL)
+ return;
+
+ ctx = gdk_display_get_app_launch_context (gdk_display_get_default ());
+ gdk_app_launch_context_set_timestamp (ctx, gtk_get_current_event_time ());
+
+ g_app_launch_context_setenv (G_APP_LAUNCH_CONTEXT (ctx),
+ "IBUS_ENGINE_NAME", cc_input_source_ibus_get_engine_name (source));
+
+ if (!g_app_info_launch (G_APP_INFO (app_info), NULL, G_APP_LAUNCH_CONTEXT (ctx), &error))
+ g_warning ("Failed to launch input source setup: %s", error->message);
+}
+
static void
row_layout_cb (CcRegionPanel *self,
CcInputRow *row)
@@ -778,6 +803,7 @@ add_input_row (CcRegionPanel *self, CcInputSource *source)
row = cc_input_row_new (source);
gtk_widget_show (GTK_WIDGET (row));
+ g_signal_connect_object (row, "show-settings", G_CALLBACK (row_settings_cb), self, G_CONNECT_SWAPPED);
g_signal_connect_object (row, "show-layout", G_CALLBACK (row_layout_cb), self, G_CONNECT_SWAPPED);
g_signal_connect_object (row, "remove-row", G_CALLBACK (row_removed_cb), self, G_CONNECT_SWAPPED);
gtk_container_add (GTK_CONTAINER (self->input_list), GTK_WIDGET (row));
@@ -897,7 +923,6 @@ update_buttons (CcRegionPanel *self)
selected = CC_INPUT_ROW (gtk_list_box_get_selected_row (self->input_list));
if (selected == NULL) {
- gtk_widget_set_visible (GTK_WIDGET (self->show_config_button), FALSE);
gtk_widget_set_sensitive (GTK_WIDGET (self->move_up_input_button), FALSE);
gtk_widget_set_sensitive (GTK_WIDGET (self->move_down_input_button), FALSE);
} else {
@@ -905,7 +930,6 @@ update_buttons (CcRegionPanel *self)
index = gtk_list_box_row_get_index (GTK_LIST_BOX_ROW (selected));
- gtk_widget_set_visible (GTK_WIDGET (self->show_config_button), CC_IS_INPUT_SOURCE_IBUS (cc_input_row_get_source (selected)));
gtk_widget_set_sensitive (GTK_WIDGET (self->move_up_input_button), index > 1);
gtk_widget_set_sensitive (GTK_WIDGET (self->move_down_input_button), index < n_rows - 1);
}
@@ -1147,35 +1171,6 @@ move_selected_input_down (CcRegionPanel *self)
move_input (self, CC_INPUT_ROW (selected), 1);
}
-static void
-show_selected_settings (CcRegionPanel *self)
-{
- CcInputRow *selected;
- CcInputSourceIBus *source;
- g_autoptr(GdkAppLaunchContext) ctx = NULL;
- g_autoptr(GDesktopAppInfo) app_info = NULL;
- g_autoptr(GError) error = NULL;
-
- selected = CC_INPUT_ROW (gtk_list_box_get_selected_row (self->input_list));
- if (selected == NULL)
- return;
- g_return_if_fail (CC_IS_INPUT_SOURCE_IBUS (cc_input_row_get_source (selected)));
- source = CC_INPUT_SOURCE_IBUS (cc_input_row_get_source (selected));
-
- app_info = cc_input_source_ibus_get_app_info (source);
- if (app_info == NULL)
- return;
-
- ctx = gdk_display_get_app_launch_context (gdk_display_get_default ());
- gdk_app_launch_context_set_timestamp (ctx, gtk_get_current_event_time ());
-
- g_app_launch_context_setenv (G_APP_LAUNCH_CONTEXT (ctx),
- "IBUS_ENGINE_NAME", cc_input_source_ibus_get_engine_name (source));
-
- if (!g_app_info_launch (G_APP_INFO (app_info), NULL, G_APP_LAUNCH_CONTEXT (ctx), &error))
- g_warning ("Failed to launch input source setup: %s", error->message);
-}
-
static void
update_shortcut_label (GtkLabel *label,
const gchar *value)
@@ -1629,13 +1624,11 @@ cc_region_panel_class_init (CcRegionPanelClass * klass)
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, restart_button);
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, restart_revealer);
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, same_source);
- gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, show_config_button);
gtk_widget_class_bind_template_callback (widget_class, restart_now);
gtk_widget_class_bind_template_callback (widget_class, add_input);
gtk_widget_class_bind_template_callback (widget_class, move_selected_input_up);
gtk_widget_class_bind_template_callback (widget_class, move_selected_input_down);
- gtk_widget_class_bind_template_callback (widget_class, show_selected_settings);
}
static void
diff --git a/panels/region/cc-region-panel.ui b/panels/region/cc-region-panel.ui
index 2aeedfc88..f9a2cbc00 100644
--- a/panels/region/cc-region-panel.ui
+++ b/panels/region/cc-region-panel.ui
@@ -383,49 +383,6 @@
-
-
- True
- False
- False
-
-
- True
-
-
-
-
- True
- False
-
-
- True
- False
-
-
- True
- True
- True
-
-
-
- Configure input source
-
-
-
-
- True
- False
- emblem-system-symbolic
- 1
-
-
-
-
-
-
-
-