region: Simplify placeholder input row
Instead of adding/removing a row, create one in the .ui file and show/hide it.
This commit is contained in:
parent
edc52c170d
commit
5d167f024f
2 changed files with 47 additions and 30 deletions
|
@ -100,6 +100,7 @@ struct _CcRegionPanel {
|
||||||
GtkWidget *input_section;
|
GtkWidget *input_section;
|
||||||
GtkWidget *options_button;
|
GtkWidget *options_button;
|
||||||
GtkWidget *input_list;
|
GtkWidget *input_list;
|
||||||
|
GtkWidget *no_inputs_row;
|
||||||
GtkWidget *add_input;
|
GtkWidget *add_input;
|
||||||
GtkWidget *remove_input;
|
GtkWidget *remove_input;
|
||||||
GtkWidget *move_up_input;
|
GtkWidget *move_up_input;
|
||||||
|
@ -640,9 +641,13 @@ update_ibus_active_sources (CcRegionPanel *self)
|
||||||
|
|
||||||
rows = gtk_container_get_children (GTK_CONTAINER (self->input_list));
|
rows = gtk_container_get_children (GTK_CONTAINER (self->input_list));
|
||||||
for (l = rows; l; l = l->next) {
|
for (l = rows; l; l = l->next) {
|
||||||
CcInputRow *row = CC_INPUT_ROW (l->data);
|
CcInputRow *row;
|
||||||
IBusEngineDesc *engine_desc;
|
IBusEngineDesc *engine_desc;
|
||||||
|
|
||||||
|
if (!CC_IS_INPUT_ROW (l->data))
|
||||||
|
continue;
|
||||||
|
row = CC_INPUT_ROW (l->data);
|
||||||
|
|
||||||
if (g_strcmp0 (cc_input_row_get_input_type (row), INPUT_SOURCE_TYPE_IBUS) != 0)
|
if (g_strcmp0 (cc_input_row_get_input_type (row), INPUT_SOURCE_TYPE_IBUS) != 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -741,20 +746,6 @@ setup_app_info_for_id (const gchar *id)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void
|
|
||||||
remove_no_input_row (GtkContainer *list)
|
|
||||||
{
|
|
||||||
g_autoptr(GList) l = NULL;
|
|
||||||
|
|
||||||
l = gtk_container_get_children (list);
|
|
||||||
if (!l)
|
|
||||||
return;
|
|
||||||
if (l->next != NULL)
|
|
||||||
return;
|
|
||||||
if (g_strcmp0 (cc_input_row_get_input_type (CC_INPUT_ROW (l->data)), "none") == 0)
|
|
||||||
gtk_container_remove (list, GTK_WIDGET (l->data));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_input_row (CcRegionPanel *self,
|
add_input_row (CcRegionPanel *self,
|
||||||
const gchar *type,
|
const gchar *type,
|
||||||
|
@ -764,7 +755,7 @@ add_input_row (CcRegionPanel *self,
|
||||||
{
|
{
|
||||||
CcInputRow *row;
|
CcInputRow *row;
|
||||||
|
|
||||||
remove_no_input_row (GTK_CONTAINER (self->input_list));
|
gtk_widget_set_visible (GTK_WIDGET (self->no_inputs_row), FALSE);
|
||||||
|
|
||||||
row = cc_input_row_new (type, id, app_info);
|
row = cc_input_row_new (type, id, app_info);
|
||||||
gtk_widget_show (GTK_WIDGET (row));
|
gtk_widget_show (GTK_WIDGET (row));
|
||||||
|
@ -775,12 +766,6 @@ add_input_row (CcRegionPanel *self,
|
||||||
cc_list_box_adjust_scrolling (GTK_LIST_BOX (self->input_list));
|
cc_list_box_adjust_scrolling (GTK_LIST_BOX (self->input_list));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
add_no_input_row (CcRegionPanel *self)
|
|
||||||
{
|
|
||||||
add_input_row (self, "none", "none", _("No input source selected"), NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_input_sources (CcRegionPanel *self,
|
add_input_sources (CcRegionPanel *self,
|
||||||
GVariant *sources)
|
GVariant *sources)
|
||||||
|
@ -789,7 +774,7 @@ add_input_sources (CcRegionPanel *self,
|
||||||
const gchar *type, *id;
|
const gchar *type, *id;
|
||||||
|
|
||||||
if (g_variant_n_children (sources) < 1) {
|
if (g_variant_n_children (sources) < 1) {
|
||||||
add_no_input_row (self);
|
gtk_widget_set_visible (GTK_WIDGET (self->no_inputs_row), TRUE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -845,7 +830,8 @@ clear_input_sources (CcRegionPanel *self)
|
||||||
|
|
||||||
list = gtk_container_get_children (GTK_CONTAINER (self->input_list));
|
list = gtk_container_get_children (GTK_CONTAINER (self->input_list));
|
||||||
for (l = list; l; l = l->next) {
|
for (l = list; l; l = l->next) {
|
||||||
gtk_container_remove (GTK_CONTAINER (self->input_list), GTK_WIDGET (l->data));
|
if (CC_IS_INPUT_ROW (l->data))
|
||||||
|
gtk_container_remove (GTK_CONTAINER (self->input_list), GTK_WIDGET (l->data));
|
||||||
}
|
}
|
||||||
|
|
||||||
cc_list_box_adjust_scrolling (GTK_LIST_BOX (self->input_list));
|
cc_list_box_adjust_scrolling (GTK_LIST_BOX (self->input_list));
|
||||||
|
@ -857,6 +843,9 @@ select_by_id (GtkWidget *row,
|
||||||
{
|
{
|
||||||
const gchar *id = data;
|
const gchar *id = data;
|
||||||
|
|
||||||
|
if (!CC_IS_INPUT_ROW (row))
|
||||||
|
return;
|
||||||
|
|
||||||
if (g_strcmp0 (cc_input_row_get_id (CC_INPUT_ROW (row)), id) == 0)
|
if (g_strcmp0 (cc_input_row_get_id (CC_INPUT_ROW (row)), id) == 0)
|
||||||
gtk_list_box_select_row (GTK_LIST_BOX (gtk_widget_get_parent (row)), GTK_LIST_BOX_ROW (row));
|
gtk_list_box_select_row (GTK_LIST_BOX (gtk_widget_get_parent (row)), GTK_LIST_BOX_ROW (row));
|
||||||
}
|
}
|
||||||
|
@ -932,7 +921,12 @@ set_input_settings (CcRegionPanel *self)
|
||||||
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ss)"));
|
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ss)"));
|
||||||
list = gtk_container_get_children (GTK_CONTAINER (self->input_list));
|
list = gtk_container_get_children (GTK_CONTAINER (self->input_list));
|
||||||
for (l = list; l; l = l->next) {
|
for (l = list; l; l = l->next) {
|
||||||
CcInputRow *row = CC_INPUT_ROW (l->data);
|
CcInputRow *row;
|
||||||
|
|
||||||
|
if (!CC_IS_INPUT_ROW (l->data))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
row = CC_INPUT_ROW (l->data);
|
||||||
g_variant_builder_add (&builder, "(ss)", cc_input_row_get_input_type (row), cc_input_row_get_id (row));
|
g_variant_builder_add (&builder, "(ss)", cc_input_row_get_input_type (row), cc_input_row_get_id (row));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -962,10 +956,14 @@ input_source_already_added (CcRegionPanel *self,
|
||||||
GList *l;
|
GList *l;
|
||||||
|
|
||||||
list = gtk_container_get_children (GTK_CONTAINER (self->input_list));
|
list = gtk_container_get_children (GTK_CONTAINER (self->input_list));
|
||||||
for (l = list; l; l = l->next)
|
for (l = list; l; l = l->next) {
|
||||||
|
if (!CC_IS_INPUT_ROW (l->data))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (g_str_equal (id, cc_input_row_get_id (CC_INPUT_ROW (l->data)))) {
|
if (g_str_equal (id, cc_input_row_get_id (CC_INPUT_ROW (l->data)))) {
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1459,9 +1457,7 @@ add_input_sources_from_localed (CcRegionPanel *self)
|
||||||
|
|
||||||
add_input_row (self, INPUT_SOURCE_TYPE_XKB, id, name ? name : id, NULL);
|
add_input_row (self, INPUT_SOURCE_TYPE_XKB, id, name ? name : id, NULL);
|
||||||
}
|
}
|
||||||
if (n == 0) {
|
gtk_widget_set_visible (GTK_WIDGET (self->no_inputs_row), n == 0);
|
||||||
add_no_input_row (self);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1512,9 +1508,13 @@ set_localed_input (CcRegionPanel *self)
|
||||||
|
|
||||||
list = gtk_container_get_children (GTK_CONTAINER (self->input_list));
|
list = gtk_container_get_children (GTK_CONTAINER (self->input_list));
|
||||||
for (li = list; li; li = li->next) {
|
for (li = list; li; li = li->next) {
|
||||||
CcInputRow *row = CC_INPUT_ROW (li->data);
|
CcInputRow *row;
|
||||||
const gchar *l, *v;
|
const gchar *l, *v;
|
||||||
|
|
||||||
|
if (!CC_IS_INPUT_ROW (li->data))
|
||||||
|
continue;
|
||||||
|
row = CC_INPUT_ROW (li->data);
|
||||||
|
|
||||||
if (g_str_equal (cc_input_row_get_input_type (row), INPUT_SOURCE_TYPE_IBUS))
|
if (g_str_equal (cc_input_row_get_input_type (row), INPUT_SOURCE_TYPE_IBUS))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1689,6 +1689,7 @@ cc_region_panel_class_init (CcRegionPanelClass * klass)
|
||||||
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, input_section);
|
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, input_section);
|
||||||
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, options_button);
|
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, options_button);
|
||||||
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, input_list);
|
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, input_list);
|
||||||
|
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, no_inputs_row);
|
||||||
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, add_input);
|
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, add_input);
|
||||||
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, remove_input);
|
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, remove_input);
|
||||||
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, move_up_input);
|
gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, move_up_input);
|
||||||
|
|
|
@ -278,6 +278,22 @@
|
||||||
<accessibility>
|
<accessibility>
|
||||||
<relation target="input_heading" type="labelled-by"/>
|
<relation target="input_heading" type="labelled-by"/>
|
||||||
</accessibility>
|
</accessibility>
|
||||||
|
<child>
|
||||||
|
<object class="GtkListBoxRow" id="no_inputs_row">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="selectable">False</property>
|
||||||
|
<property name="activatable">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="margin">18</property>
|
||||||
|
<property name="label" translatable="yes">No input source selected</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
|
Loading…
Add table
Reference in a new issue