| 23 #include <pidgin/pidginstatusprimitivechooser.h> |
23 #include <pidgin/pidginstatusprimitivechooser.h> |
| 24 |
24 |
| 25 #include <pidgin/pidginiconname.h> |
25 #include <pidgin/pidginiconname.h> |
| 26 |
26 |
| 27 struct _PidginStatusPrimitiveChooser { |
27 struct _PidginStatusPrimitiveChooser { |
| 28 AdwBin parent; |
28 AdwComboRow parent; |
| 29 |
|
| 30 GtkDropDown *chooser; |
|
| 31 }; |
29 }; |
| 32 |
30 |
| 33 G_DEFINE_TYPE(PidginStatusPrimitiveChooser, pidgin_status_primitive_chooser, |
31 G_DEFINE_TYPE(PidginStatusPrimitiveChooser, pidgin_status_primitive_chooser, |
| 34 ADW_TYPE_BIN) |
32 ADW_TYPE_COMBO_ROW) |
| 35 |
33 |
| 36 /****************************************************************************** |
34 /****************************************************************************** |
| 37 * Helpers |
35 * Helpers |
| 38 *****************************************************************************/ |
36 *****************************************************************************/ |
| 39 static PurpleStatusPrimitive |
37 static PurpleStatusPrimitive |
| 108 |
106 |
| 109 /* Widget template */ |
107 /* Widget template */ |
| 110 gtk_widget_class_set_template_from_resource( |
108 gtk_widget_class_set_template_from_resource( |
| 111 widget_class, "/im/pidgin/Pidgin3/statusprimitivechooser.ui"); |
109 widget_class, "/im/pidgin/Pidgin3/statusprimitivechooser.ui"); |
| 112 |
110 |
| 113 gtk_widget_class_bind_template_child(widget_class, |
|
| 114 PidginStatusPrimitiveChooser, |
|
| 115 chooser); |
|
| 116 |
|
| 117 gtk_widget_class_bind_template_callback(widget_class, |
111 gtk_widget_class_bind_template_callback(widget_class, |
| 118 pidgin_status_primitive_chooser_icon_name_cb); |
112 pidgin_status_primitive_chooser_icon_name_cb); |
| 119 gtk_widget_class_bind_template_callback(widget_class, |
113 gtk_widget_class_bind_template_callback(widget_class, |
| 120 pidgin_status_primitive_chooser_label_cb); |
114 pidgin_status_primitive_chooser_label_cb); |
| 121 } |
115 } |
| 134 const char *value = NULL; |
128 const char *value = NULL; |
| 135 |
129 |
| 136 g_return_val_if_fail(PIDGIN_IS_STATUS_PRIMITIVE_CHOOSER(chooser), |
130 g_return_val_if_fail(PIDGIN_IS_STATUS_PRIMITIVE_CHOOSER(chooser), |
| 137 PURPLE_STATUS_UNSET); |
131 PURPLE_STATUS_UNSET); |
| 138 |
132 |
| 139 selected = gtk_drop_down_get_selected_item(chooser->chooser); |
133 selected = adw_combo_row_get_selected_item(ADW_COMBO_ROW(chooser)); |
| 140 value = gtk_string_object_get_string(selected); |
134 value = gtk_string_object_get_string(selected); |
| 141 |
135 |
| 142 return pidgin_status_primitive_chooser_primitive_from_string(value); |
136 return pidgin_status_primitive_chooser_primitive_from_string(value); |
| 143 } |
137 } |
| 144 |
138 |
| 145 void |
139 void |
| 146 pidgin_status_primitive_chooser_set_selected(PidginStatusPrimitiveChooser *chooser, |
140 pidgin_status_primitive_chooser_set_selected(PidginStatusPrimitiveChooser *chooser, |
| 147 PurpleStatusPrimitive primitive) |
141 PurpleStatusPrimitive primitive) |
| 148 { |
142 { |
| 149 GListModel *model = NULL; |
143 GListModel *model = NULL; |
| |
144 GtkStringList *list = NULL; |
| 150 |
145 |
| 151 g_return_if_fail(PIDGIN_IS_STATUS_PRIMITIVE_CHOOSER(chooser)); |
146 g_return_if_fail(PIDGIN_IS_STATUS_PRIMITIVE_CHOOSER(chooser)); |
| 152 |
147 |
| 153 model = gtk_drop_down_get_model(chooser->chooser); |
148 model = adw_combo_row_get_model(ADW_COMBO_ROW(chooser)); |
| |
149 list = GTK_STRING_LIST(model); |
| 154 for(guint i = 0; i < g_list_model_get_n_items(model); i++) { |
150 for(guint i = 0; i < g_list_model_get_n_items(model); i++) { |
| 155 PurpleStatusPrimitive candidate = PURPLE_STATUS_UNSET; |
151 PurpleStatusPrimitive candidate = PURPLE_STATUS_UNSET; |
| 156 GtkStringObject *str = NULL; |
|
| 157 const char *value = NULL; |
152 const char *value = NULL; |
| 158 |
153 |
| 159 str = g_list_model_get_item(model, i); |
154 value = gtk_string_list_get_string(list, i); |
| 160 value = gtk_string_object_get_string(str); |
|
| 161 |
|
| 162 candidate = pidgin_status_primitive_chooser_primitive_from_string(value); |
155 candidate = pidgin_status_primitive_chooser_primitive_from_string(value); |
| 163 g_clear_object(&str); |
|
| 164 |
156 |
| 165 if(primitive == candidate) { |
157 if(primitive == candidate) { |
| 166 gtk_drop_down_set_selected(chooser->chooser, i); |
158 adw_combo_row_set_selected(ADW_COMBO_ROW(chooser), i); |
| |
159 break; |
| 167 } |
160 } |
| 168 } |
161 } |
| 169 } |
162 } |