diff --git a/panels/region/cc-input-row.c b/panels/region/cc-input-row.c index eadc20443..bc38d9bef 100644 --- a/panels/region/cc-input-row.c +++ b/panels/region/cc-input-row.c @@ -29,6 +29,7 @@ struct _CcInputRow GtkLabel *name_label; GtkButton *remove_button; GtkButton *settings_button; + GtkSeparator *settings_separator; GtkListBox *drag_widget; }; @@ -112,6 +113,40 @@ drag_data_received_cb (CcInputRow *self, self); } +static void +move_up_button_clicked_cb (CcInputRow *self, + GtkButton *button) +{ + GtkListBox *list_box = GTK_LIST_BOX (gtk_widget_get_parent (GTK_WIDGET (self))); + gint previous_idx = gtk_list_box_row_get_index (GTK_LIST_BOX_ROW (self)) - 1; + GtkListBoxRow *previous_row = gtk_list_box_get_row_at_index (list_box, previous_idx); + + if (previous_row == NULL) + return; + + g_signal_emit (self, + signals[SIGNAL_MOVE_ROW], + 0, + previous_row); +} + +static void +move_down_button_clicked_cb (CcInputRow *self, + GtkButton *button) +{ + GtkListBox *list_box = GTK_LIST_BOX (gtk_widget_get_parent (GTK_WIDGET (self))); + gint next_idx = gtk_list_box_row_get_index (GTK_LIST_BOX_ROW (self)) + 1; + GtkListBoxRow *next_row = gtk_list_box_get_row_at_index (list_box, next_idx); + + if (next_row == NULL) + return; + + g_signal_emit (next_row, + signals[SIGNAL_MOVE_ROW], + 0, + self); +} + static void settings_button_clicked_cb (CcInputRow *self) { @@ -160,14 +195,17 @@ cc_input_row_class_init (CcInputRowClass *klass) gtk_widget_class_bind_template_child (widget_class, CcInputRow, name_label); gtk_widget_class_bind_template_child (widget_class, CcInputRow, remove_button); gtk_widget_class_bind_template_child (widget_class, CcInputRow, settings_button); + gtk_widget_class_bind_template_child (widget_class, CcInputRow, settings_separator); - gtk_widget_class_bind_template_callback (widget_class, drag_data_get_cb); gtk_widget_class_bind_template_callback (widget_class, drag_begin_cb); - gtk_widget_class_bind_template_callback (widget_class, drag_end_cb); + gtk_widget_class_bind_template_callback (widget_class, drag_data_get_cb); gtk_widget_class_bind_template_callback (widget_class, drag_data_received_cb); + gtk_widget_class_bind_template_callback (widget_class, drag_end_cb); 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, move_down_button_clicked_cb); + gtk_widget_class_bind_template_callback (widget_class, move_up_button_clicked_cb); gtk_widget_class_bind_template_callback (widget_class, remove_button_clicked_cb); + gtk_widget_class_bind_template_callback (widget_class, settings_button_clicked_cb); signals[SIGNAL_SHOW_SETTINGS] = g_signal_new ("show-settings", @@ -243,6 +281,7 @@ cc_input_row_new (CcInputSource *source) label_changed_cb (self); gtk_widget_set_visible (GTK_WIDGET (self->settings_button), CC_IS_INPUT_SOURCE_IBUS (source)); + gtk_widget_set_visible (GTK_WIDGET (self->settings_separator), 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 cb98c58f1..4021175c2 100644 --- a/panels/region/cc-input-row.ui +++ b/panels/region/cc-input-row.ui @@ -68,6 +68,34 @@ False 6 vertical + + + True + 0 + Move up + + + + + + + True + 0 + Move down + + + + + + + True + horizontal + + False @@ -79,6 +107,12 @@ + + + True + horizontal + + True @@ -90,6 +124,12 @@ + + + True + horizontal + + True