diff options
-rw-r--r-- | pidgin/meson.build | 2 | ||||
-rw-r--r-- | pidgin/pidginstatusdisplay.c | 274 | ||||
-rw-r--r-- | pidgin/pidginstatusdisplay.h | 129 | ||||
-rw-r--r-- | pidgin/pidginstatusmanager.c | 21 | ||||
-rw-r--r-- | pidgin/pidginstatusprimitivechooser.c | 63 | ||||
-rw-r--r-- | pidgin/resources/Status/display.ui | 38 | ||||
-rw-r--r-- | pidgin/resources/Status/manager.ui | 28 | ||||
-rw-r--r-- | pidgin/resources/pidgin.gresource.xml | 1 | ||||
-rw-r--r-- | pidgin/resources/statusprimitivechooser.ui | 30 |
9 files changed, 484 insertions, 102 deletions
diff --git a/pidgin/meson.build b/pidgin/meson.build index 9d2eb69129..07824fab6a 100644 --- a/pidgin/meson.build +++ b/pidgin/meson.build @@ -55,6 +55,7 @@ libpidgin_SOURCES = [ 'pidginpresenceicon.c', 'pidginprotocolchooser.c', 'pidginstatusbox.c', + 'pidginstatusdisplay.c', 'pidginstatuseditor.c', 'pidginstatusmanager.c', 'pidginstatusprimitivechooser.c', @@ -122,6 +123,7 @@ libpidgin_headers = [ 'pidginpresenceicon.h', 'pidginprotocolchooser.h', 'pidginstatusbox.h', + 'pidginstatusdisplay.h', 'pidginstatuseditor.h', 'pidginstatusmanager.h', 'pidginstatusprimitivechooser.h', diff --git a/pidgin/pidginstatusdisplay.c b/pidgin/pidginstatusdisplay.c new file mode 100644 index 0000000000..f85aa224ab --- /dev/null +++ b/pidgin/pidginstatusdisplay.c @@ -0,0 +1,274 @@ +/* + * Pidgin - Internet Messenger + * Copyright (C) Pidgin Developers <devel@pidgin.im> + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <https://www.gnu.org/licenses/>. + */ +#include <glib/gi18n-lib.h> + +#include <gtk/gtk.h> + +#include "pidginstatusdisplay.h" +#include "pidginiconname.h" + +struct _PidginStatusDisplay { + GtkBox parent; + + GtkImage *image; + GtkLabel *label; + + PurpleStatusPrimitive primitive; + PurpleSavedStatus *status; +}; + +enum { + PROP_0, + PROP_PRIMITIVE, + PROP_SAVED_STATUS, + PROP_LAST +}; + +static GParamSpec *properties[PROP_LAST] = {NULL}; + +/****************************************************************************** + * Callbacks + *****************************************************************************/ +static void +pidgin_status_display_refresh(PidginStatusDisplay *display) { + const char *icon_name = NULL; + char *label = NULL; + + if(display->status != NULL) { + PurpleSavedStatus *status = display->status; + PurpleStatusPrimitive primitive; + GString *text = NULL; + + primitive = purple_savedstatus_get_primitive_type(status); + icon_name = pidgin_icon_name_from_status_primitive(primitive, NULL); + + text = g_string_new(purple_savedstatus_get_title(status)); + + /* Transient statuses do not have a title, so the savedstatus API + * returns the message when purple_savedstatus_get_title() is called, + * so we don't need to get the message a second time. + */ + if(!purple_savedstatus_is_transient(status)) { + const char *message = NULL; + + message = purple_savedstatus_get_message(status); + if(message != NULL) { + char *stripped = purple_markup_strip_html(message); + + purple_util_chrreplace(stripped, '\n', ' '); + g_string_append_printf(text, " - %s", stripped); + g_free(stripped); + } + } + + label = g_string_free(text, FALSE); + + } else if(display->primitive != PURPLE_STATUS_UNSET) { + icon_name = pidgin_icon_name_from_status_primitive(display->primitive, + NULL); + label = g_strdup(purple_primitive_get_name_from_type(display->primitive)); + } + + gtk_image_set_from_icon_name(display->image, icon_name); + gtk_label_set_text(display->label, label); + + g_free(label); +} + +/****************************************************************************** + * GObject implementation + *****************************************************************************/ +G_DEFINE_TYPE(PidginStatusDisplay, pidgin_status_display, GTK_TYPE_BOX) + +static void +pidgin_status_display_get_property(GObject *object, guint prop_id, + GValue *value, GParamSpec *pspec) +{ + PidginStatusDisplay *display = PIDGIN_STATUS_DISPLAY(object); + + switch (prop_id) { + case PROP_PRIMITIVE: + g_value_set_enum(value, + pidgin_status_display_get_primitive(display)); + break; + case PROP_SAVED_STATUS: + g_value_set_pointer(value, + pidgin_status_display_get_saved_status(display)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +static void +pidgin_status_display_set_property(GObject *object, guint prop_id, + const GValue *value, GParamSpec *pspec) +{ + PidginStatusDisplay *display = PIDGIN_STATUS_DISPLAY(object); + + switch (prop_id) { + case PROP_PRIMITIVE: + pidgin_status_display_set_primitive(display, + g_value_get_enum(value)); + break; + case PROP_SAVED_STATUS: + pidgin_status_display_set_saved_status(display, + g_value_get_pointer(value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +static void +pidgin_status_display_class_init(PidginStatusDisplayClass *klass) { + GObjectClass *obj_class = G_OBJECT_CLASS(klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); + + /* Properties */ + obj_class->get_property = pidgin_status_display_get_property; + obj_class->set_property = pidgin_status_display_set_property; + + /** + * PidginStatusDisplay:primitive: + * + * The status primitive that is currently displayed. + * + * Since: 3.0.0 + */ + properties[PROP_PRIMITIVE] = g_param_spec_enum( + "primitive", "primitive", + "The status primitive that is currently displayed.", + PURPLE_TYPE_STATUS_PRIMITIVE, PURPLE_STATUS_UNSET, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + /** + * PidginStatusDisplay:saved-status: + * + * The saved status that is currently displayed. + * + * Since: 3.0.0 + */ + properties[PROP_SAVED_STATUS] = g_param_spec_pointer( + "saved-status", "saved-status", + "The saved status that is currently displayed.", + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties(obj_class, PROP_LAST, properties); + + /* Widget template */ + gtk_widget_class_set_template_from_resource( + widget_class, "/im/pidgin/Pidgin3/Status/display.ui"); + + gtk_widget_class_bind_template_child(widget_class, PidginStatusDisplay, + image); + gtk_widget_class_bind_template_child(widget_class, PidginStatusDisplay, + label); +} + +static void +pidgin_status_display_init(PidginStatusDisplay *display) { + gtk_widget_init_template(GTK_WIDGET(display)); +} + +/****************************************************************************** + * Public API + *****************************************************************************/ +GtkWidget * +pidgin_status_display_new(void) { + return g_object_new(PIDGIN_TYPE_STATUS_DISPLAY, NULL); +} + +GtkWidget * +pidgin_status_display_new_for_primitive(PurpleStatusPrimitive primitive) { + return g_object_new(PIDGIN_TYPE_STATUS_DISPLAY, + "primitive", primitive, + NULL); +} + +GtkWidget * +pidgin_status_display_new_for_saved_status(PurpleSavedStatus *status) { + return g_object_new(PIDGIN_TYPE_STATUS_DISPLAY, + "saved-status", status, + NULL); +} + +PurpleStatusPrimitive +pidgin_status_display_get_primitive(PidginStatusDisplay *display) { + g_return_val_if_fail(PIDGIN_IS_STATUS_DISPLAY(display), + PURPLE_STATUS_UNSET); + + return display->primitive; +} + +void +pidgin_status_display_set_primitive(PidginStatusDisplay *display, + PurpleStatusPrimitive primitive) +{ + g_return_if_fail(PIDGIN_IS_STATUS_DISPLAY(display)); + + g_object_freeze_notify(G_OBJECT(display)); + + display->status = NULL; + g_object_notify_by_pspec(G_OBJECT(display), properties[PROP_SAVED_STATUS]); + + if(display->primitive != primitive) { + display->primitive = primitive; + g_object_notify_by_pspec(G_OBJECT(display), + properties[PROP_PRIMITIVE]); + } + + pidgin_status_display_refresh(display); + + g_object_thaw_notify(G_OBJECT(display)); +} + +PurpleSavedStatus * +pidgin_status_display_get_saved_status(PidginStatusDisplay *display) { + g_return_val_if_fail(PIDGIN_IS_STATUS_DISPLAY(display), NULL); + + return display->status; +} + +void +pidgin_status_display_set_saved_status(PidginStatusDisplay *display, + PurpleSavedStatus *status) +{ + g_return_if_fail(PIDGIN_IS_STATUS_DISPLAY(display)); + + g_object_freeze_notify(G_OBJECT(display)); + + display->primitive = PURPLE_STATUS_UNSET; + g_object_notify_by_pspec(G_OBJECT(display), properties[PROP_PRIMITIVE]); + + if(display->status != status) { + display->status = status; + g_object_notify_by_pspec(G_OBJECT(display), + properties[PROP_SAVED_STATUS]); + } + + pidgin_status_display_refresh(display); + + g_object_thaw_notify(G_OBJECT(display)); +} diff --git a/pidgin/pidginstatusdisplay.h b/pidgin/pidginstatusdisplay.h new file mode 100644 index 0000000000..9906700e05 --- /dev/null +++ b/pidgin/pidginstatusdisplay.h @@ -0,0 +1,129 @@ +/* + * Pidgin - Internet Messenger + * Copyright (C) Pidgin Developers <devel@pidgin.im> + * + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <https://www.gnu.org/licenses/>. + */ + +#if !defined(PIDGIN_GLOBAL_HEADER_INSIDE) && !defined(PIDGIN_COMPILATION) +# error "only <pidgin.h> may be included directly" +#endif + +#ifndef PIDGIN_STATUS_DISPLAY_H +#define PIDGIN_STATUS_DISPLAY_H + +#include <gtk/gtk.h> + +#include <purple.h> + +G_BEGIN_DECLS + +#define PIDGIN_TYPE_STATUS_DISPLAY (pidgin_status_display_get_type()) +G_DECLARE_FINAL_TYPE(PidginStatusDisplay, pidgin_status_display, + PIDGIN, STATUS_DISPLAY, GtkBox) + +/** + * pidgin_status_display_new: + * + * Creates a display for a status. + * + * Returns: (transfer full): The status display. + * + * Since: 3.0.0 + */ +GtkWidget *pidgin_status_display_new(void); + +/** + * pidgin_status_display_new_for_primitive: + * @primitive: The status primitive to display. + * + * Creates a display for a status primitive. + * + * Returns: (transfer full): The status display. + * + * Since: 3.0.0 + */ +GtkWidget *pidgin_status_display_new_for_primitive(PurpleStatusPrimitive primitive); + +/** + * pidgin_status_display_new_for_saved_status: + * @status: The status to display. + * + * Creates a display for a saved status. + * + * Returns: (transfer full): The status display. + * + * Since: 3.0.0 + */ +GtkWidget *pidgin_status_display_new_for_saved_status(PurpleSavedStatus *status); + +/** + * pidgin_status_display_get_primitive: + * @display: The display. + * + * Gets the currently displayed status primitive. + * + * Returns: (transfer none): Returns the [type@Purple.StatusPrimitive] that is + * currently displayed. + * + * Since: 3.0.0 + */ +PurpleStatusPrimitive pidgin_status_display_get_primitive(PidginStatusDisplay *display); + +/** + * pidgin_status_display_set_primitive: + * @display: The display. + * @primitive: The status primitive to display. + * + * Sets the currently displayed status primitive. + * + * If a saved status was previously set, it will be unset. + * + * Since: 3.0.0 + */ +void pidgin_status_display_set_primitive(PidginStatusDisplay *display, PurpleStatusPrimitive primitive); + +/** + * pidgin_status_display_get_saved_status: + * @display: The display. + * + * Gets the currently displayed saved status. + * + * Returns: (transfer none): Returns the [type@Purple.SavedStatus] that is + * currently displayed. + * + * Since: 3.0.0 + */ +PurpleSavedStatus *pidgin_status_display_get_saved_status(PidginStatusDisplay *display); + +/** + * pidgin_status_display_set_saved_status: + * @display: The display. + * @status: The saved status to display. + * + * Sets the currently displayed saved status. + * + * If a status primitive was previously set, it will be unset. + * + * Since: 3.0.0 + */ +void pidgin_status_display_set_saved_status(PidginStatusDisplay *display, PurpleSavedStatus *status); + +G_END_DECLS + +#endif /* PIDGIN_STATUS_DISPLAY_H */ diff --git a/pidgin/pidginstatusmanager.c b/pidgin/pidginstatusmanager.c index 309e18a6eb..734554e761 100644 --- a/pidgin/pidginstatusmanager.c +++ b/pidgin/pidginstatusmanager.c @@ -125,12 +125,11 @@ pidgin_status_manager_add(PidginStatusManager *manager, GObject *wrapper = NULL; PurpleStatusPrimitive primitive; gchar *message = NULL; - const gchar *icon_name = NULL, *type = NULL; + const char *type = NULL; message = purple_markup_strip_html(purple_savedstatus_get_message(status)); primitive = purple_savedstatus_get_primitive_type(status); - icon_name = pidgin_icon_name_from_status_primitive(primitive, NULL); type = purple_primitive_get_name_from_type(primitive); /* PurpleSavedStatus is a boxed type, so it can't be put in a GListModel; @@ -140,7 +139,6 @@ pidgin_status_manager_add(PidginStatusManager *manager, g_object_set_data_full(wrapper, "title", g_strdup(purple_savedstatus_get_title(status)), g_free); - g_object_set_data_full(wrapper, "icon-name", g_strdup(icon_name), g_free); g_object_set_data_full(wrapper, "type", g_strdup(type), g_free); g_object_set_data_full(wrapper, "message", g_strdup(message), g_free); @@ -208,6 +206,21 @@ pidgin_status_manager_response_cb(GtkDialog *dialog, gint response_id, } } +static PurpleStatusPrimitive +pidgin_status_manager_lookup_primitive_cb(G_GNUC_UNUSED GObject *self, + GObject *wrapper, + G_GNUC_UNUSED gpointer data) +{ + PurpleStatusPrimitive primitive = PURPLE_STATUS_UNSET; + + if(G_IS_OBJECT(wrapper)) { + PurpleSavedStatus *status = g_object_get_data(wrapper, "savedstatus"); + primitive = purple_savedstatus_get_primitive_type(status); + } + + return primitive; +} + static char * pidgin_status_manager_sort_data_cb(GObject *wrapper, const char *name, G_GNUC_UNUSED gpointer data) @@ -388,6 +401,8 @@ pidgin_status_manager_class_init(PidginStatusManagerClass *klass) { gtk_widget_class_bind_template_callback(widget_class, pidgin_status_manager_response_cb); gtk_widget_class_bind_template_callback(widget_class, + pidgin_status_manager_lookup_primitive_cb); + gtk_widget_class_bind_template_callback(widget_class, pidgin_status_manager_lookup_text_data_cb); gtk_widget_class_bind_template_callback(widget_class, pidgin_status_manager_sort_data_cb); diff --git a/pidgin/pidginstatusprimitivechooser.c b/pidgin/pidginstatusprimitivechooser.c index 9c13e0149e..8f0960996a 100644 --- a/pidgin/pidginstatusprimitivechooser.c +++ b/pidgin/pidginstatusprimitivechooser.c @@ -32,64 +32,21 @@ G_DEFINE_TYPE(PidginStatusPrimitiveChooser, pidgin_status_primitive_chooser, ADW_TYPE_COMBO_ROW) /****************************************************************************** - * Helpers - *****************************************************************************/ -static PurpleStatusPrimitive -pidgin_status_primitive_chooser_primitive_from_string(const char *str) { - if(purple_strequal(str, "offline")) { - return PURPLE_STATUS_OFFLINE; - } else if(purple_strequal(str, "available")) { - return PURPLE_STATUS_AVAILABLE; - } else if(purple_strequal(str, "unavailable")) { - return PURPLE_STATUS_UNAVAILABLE; - } else if(purple_strequal(str, "invisible")) { - return PURPLE_STATUS_INVISIBLE; - } else if(purple_strequal(str, "away")) { - return PURPLE_STATUS_AWAY; - } else if(purple_strequal(str, "extended-away")) { - return PURPLE_STATUS_EXTENDED_AWAY; - } - - return PURPLE_STATUS_UNSET; -} - -/****************************************************************************** * Callbacks *****************************************************************************/ -static char * -pidgin_status_primitive_chooser_icon_name_cb(G_GNUC_UNUSED GObject *self, +static PurpleStatusPrimitive +pidgin_status_primitive_chooser_primitive_cb(G_GNUC_UNUSED GObject *self, GtkStringObject *object, G_GNUC_UNUSED gpointer data) { PurpleStatusPrimitive primitive = PURPLE_STATUS_UNSET; - const char *value = NULL; - - if(!GTK_IS_STRING_OBJECT(object)) { - return NULL; - } - - value = gtk_string_object_get_string(object); - primitive = pidgin_status_primitive_chooser_primitive_from_string(value); - - return g_strdup(pidgin_icon_name_from_status_primitive(primitive, NULL)); -} - -static char * -pidgin_status_primitive_chooser_label_cb(G_GNUC_UNUSED GObject *self, - GtkStringObject *object, - G_GNUC_UNUSED gpointer data) -{ - PurpleStatusPrimitive primitive = PURPLE_STATUS_UNSET; - const char *value = NULL; - if(!GTK_IS_STRING_OBJECT(object)) { - return NULL; + if(GTK_IS_STRING_OBJECT(object)) { + const char *value = gtk_string_object_get_string(object); + primitive = purple_primitive_get_type_from_id(value); } - value = gtk_string_object_get_string(object); - primitive = pidgin_status_primitive_chooser_primitive_from_string(value); - - return g_strdup(purple_primitive_get_name_from_type(primitive)); + return primitive; } /****************************************************************************** @@ -109,9 +66,7 @@ pidgin_status_primitive_chooser_class_init(PidginStatusPrimitiveChooserClass *kl widget_class, "/im/pidgin/Pidgin3/statusprimitivechooser.ui"); gtk_widget_class_bind_template_callback(widget_class, - pidgin_status_primitive_chooser_icon_name_cb); - gtk_widget_class_bind_template_callback(widget_class, - pidgin_status_primitive_chooser_label_cb); + pidgin_status_primitive_chooser_primitive_cb); } /****************************************************************************** @@ -133,7 +88,7 @@ pidgin_status_primitive_chooser_get_selected(PidginStatusPrimitiveChooser *choos selected = adw_combo_row_get_selected_item(ADW_COMBO_ROW(chooser)); value = gtk_string_object_get_string(selected); - return pidgin_status_primitive_chooser_primitive_from_string(value); + return purple_primitive_get_type_from_id(value); } void @@ -152,7 +107,7 @@ pidgin_status_primitive_chooser_set_selected(PidginStatusPrimitiveChooser *choos const char *value = NULL; value = gtk_string_list_get_string(list, i); - candidate = pidgin_status_primitive_chooser_primitive_from_string(value); + candidate = purple_primitive_get_type_from_id(value); if(primitive == candidate) { adw_combo_row_set_selected(ADW_COMBO_ROW(chooser), i); diff --git a/pidgin/resources/Status/display.ui b/pidgin/resources/Status/display.ui new file mode 100644 index 0000000000..5d41fe5d6e --- /dev/null +++ b/pidgin/resources/Status/display.ui @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + +Pidgin - Internet Messenger +Copyright (C) Pidgin Developers <devel@pidgin.im> + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, see <https://www.gnu.org/licenses/>. + +--> +<interface> + <requires lib="gtk" version="4.0"/> + <!-- interface-license-type gplv2 --> + <!-- interface-name Pidgin --> + <!-- interface-description Internet Messenger --> + <!-- interface-copyright Pidgin Developers <devel@pidgin.im> --> + <template class="PidginStatusDisplay" parent="GtkBox"> + <property name="css-classes">body</property> + <property name="orientation">horizontal</property> + <property name="spacing">6</property> + <child> + <object class="GtkImage" id="image"/> + </child> + <child> + <object class="GtkLabel" id="label"/> + </child> + </template> +</interface> diff --git a/pidgin/resources/Status/manager.ui b/pidgin/resources/Status/manager.ui index d7eaec35e8..b89698d478 100644 --- a/pidgin/resources/Status/manager.ui +++ b/pidgin/resources/Status/manager.ui @@ -107,28 +107,12 @@ License along with this library; if not, see <https://www.gnu.org/licenses/>. <interface> <template class="GtkListItem"> <property name="child"> - <object class="GtkBox"> - <property name="orientation">horizontal</property> - <child> - <object class="GtkImage"> - <binding name="icon-name"> - <closure type="gchararray" function="pidgin_status_manager_lookup_text_data_cb"> - <lookup name="item">GtkListItem</lookup> - <constant type="gchararray">icon-name</constant> - </closure> - </binding> - </object> - </child> - <child> - <object class="GtkLabel"> - <binding name="label"> - <closure type="gchararray" function="pidgin_status_manager_lookup_text_data_cb"> - <lookup name="item">GtkListItem</lookup> - <constant type="gchararray">type</constant> - </closure> - </binding> - </object> - </child> + <object class="PidginStatusDisplay"> + <binding name="primitive"> + <closure type="PurpleStatusPrimitive" function="pidgin_status_manager_lookup_primitive_cb"> + <lookup name="item">GtkListItem</lookup> + </closure> + </binding> </object> </property> </template> diff --git a/pidgin/resources/pidgin.gresource.xml b/pidgin/resources/pidgin.gresource.xml index aa1505c603..8daf03f831 100644 --- a/pidgin/resources/pidgin.gresource.xml +++ b/pidgin/resources/pidgin.gresource.xml @@ -39,6 +39,7 @@ <file compressed="true" preprocess="xml-stripblanks">Protocols/detailed-view.ui</file> <file compressed="true" preprocess="xml-stripblanks">Roomlist/roomlist.ui</file> <file compressed="true" preprocess="xml-stripblanks">Status/box.ui</file> + <file compressed="true" preprocess="xml-stripblanks">Status/display.ui</file> <file compressed="true" preprocess="xml-stripblanks">Status/editor.ui</file> <file compressed="true" preprocess="xml-stripblanks">Status/manager.ui</file> <file compressed="true" preprocess="xml-stripblanks">Whiteboard/whiteboard.ui</file> diff --git a/pidgin/resources/statusprimitivechooser.ui b/pidgin/resources/statusprimitivechooser.ui index e297afacef..4fd7995fc1 100644 --- a/pidgin/resources/statusprimitivechooser.ui +++ b/pidgin/resources/statusprimitivechooser.ui @@ -33,28 +33,12 @@ along with this program; if not, see <https://www.gnu.org/licenses/>. <interface> <template class="GtkListItem"> <property name="child"> - <object class="GtkBox"> - <property name="orientation">horizontal</property> - <property name="spacing">6</property> - <child> - <object class="GtkImage"> - <binding name="icon-name"> - <closure type="gchararray" function="pidgin_status_primitive_chooser_icon_name_cb"> - <lookup name="item">GtkListItem</lookup> - </closure> - </binding> - </object> - </child> - <child> - <object class="GtkLabel"> - <property name="xalign">0</property> - <binding name="label"> - <closure type="gchararray" function="pidgin_status_primitive_chooser_label_cb"> - <lookup name="item">GtkListItem</lookup> - </closure> - </binding> - </object> - </child> + <object class="PidginStatusDisplay"> + <binding name="primitive"> + <closure type="PurpleStatusPrimitive" function="pidgin_status_primitive_chooser_primitive_cb"> + <lookup name="item">GtkListItem</lookup> + </closure> + </binding> </object> </property> </template> @@ -71,7 +55,7 @@ along with this program; if not, see <https://www.gnu.org/licenses/>. <item>unavailable</item> <item>invisible</item> <item>away</item> - <item>extended-away</item> + <item>extended_away</item> </items> </object> </property> |