pidgin/quail/quail-redux

6558e77c1bc2
Parents 4fb6ceff677a
Children af7dc857b731
Get the basic status selector setting the statuses
--- a/src/QuailStatusSelector.cpp Tue Aug 27 10:49:38 2013 +0100
+++ b/src/QuailStatusSelector.cpp Thu Aug 29 13:55:44 2013 +0100
@@ -69,9 +69,96 @@
{
qDebug() << "QuailStatusSelector::slotStatusChanged";
Q_UNUSED(index)
+
+ switch (statusSelector->itemData(index).toInt())
+ {
+ case QUAIL_ACTION_STATUS_NEW:
+ qDebug() << "QuailStatusSelector::slotStatusChanged.NEW";
+ break;
+ case QUAIL_ACTION_STATUS_SAVED:
+ qDebug() << "QuailStatusSelector::slotStatusChanged.SAVED";
+ break;
+ case PURPLE_STATUS_OFFLINE:
+ qDebug() << "QuailStatusSelector::slotStatusChanged.OFFLINE";
+ slotSetStatus(index);
+ break;
+ case PURPLE_STATUS_INVISIBLE:
+ qDebug() << "QuailStatusSelector::slotStatusChanged.INVISIBLE";
+ slotSetStatus(index);
+ break;
+ case PURPLE_STATUS_UNAVAILABLE:
+ qDebug() << "QuailStatusSelector::slotStatusChanged.UNAVAILABLE";
+ slotSetStatus(index);
+ break;
+ case PURPLE_STATUS_AWAY:
+ qDebug() << "QuailStatusSelector::slotStatusChanged.AWAY";
+ slotSetStatus(index);
+ break;
+ case PURPLE_STATUS_AVAILABLE:
+ qDebug() << "QuailStatusSelector::slotStatusChanged.AVAILABLE";
+ slotSetStatus(index);
+ break;
+ default:
+ /* Must be a custom status */
+ break;
+
+ }
+
}
void
+QuailStatusSelector::slotSetStatus(int statusId)
+{
+ qDebug() << "QuailStatusSelector::slotSetStatus" << statusId;
+ GList *accounts = purple_accounts_get_all_active();
+ GList *node;
+ PurpleAccount *account;
+ qDebug() << "QuailStatusSelector::slotSetStatus.1";
+
+ for (node = accounts; node != NULL; node = node->next)
+ {
+ qDebug() << "QuailStatusSelector::slotSetStatus.2";
+// PurpleStatusType activeStatus;
+ PurpleStatusType *status_type;
+ //PurpleStatus *status;
+ account = (PurpleAccount*)node->data;
+ const char *id = NULL;
+ qDebug() << "QuailStatusSelector::slotSetStatus.3";
+// activeStatus = purple_account_get_active_status(account);
+ status_type = find_status_type_by_index(account, statusId);
+ id = purple_status_type_get_id(status_type);
+ qDebug() << "QuailStatusSelector::slotSetStatus.4";
+ purple_account_set_status(account, id, TRUE, NULL);
+ qDebug() << "QuailStatusSelector::slotSetStatus.5";
+ }
+ qDebug() << "QuailStatusSelector::slotSetStatus.end";
+}
+
+
+/* COPIED from gtkstatusbox.c, this should be in purple */
+PurpleStatusType *
+QuailStatusSelector::find_status_type_by_index(const PurpleAccount *account,
+ gint active)
+{
+ GList *l = purple_account_get_status_types(account);
+ gint i;
+
+ for (i = 0; l; l = l->next) {
+ PurpleStatusType *status_type = (PurpleStatusType*)l->data;
+ if (!purple_status_type_is_user_settable(status_type) ||
+ purple_status_type_is_independent(status_type))
+ continue;
+
+ if (active == i)
+ return status_type;
+ i++;
+ }
+
+ return NULL;
+}
+
+
+void
QuailStatusSelector::slotPickBuddyIcon()
{
qDebug() << "QuailStatusSelector::slotPickBuddyIcon()";
--- a/src/QuailStatusSelector.h Tue Aug 27 10:49:38 2013 +0100
+++ b/src/QuailStatusSelector.h Thu Aug 29 13:55:44 2013 +0100
@@ -3,6 +3,11 @@
#include <QWidget>
+#include <glib.h>
+#include <libpurple/account.h>
+#include <libpurple/status.h>
+
+
class QComboBox;
class QLabel;
@@ -19,8 +24,12 @@
void updateStatusSelector();
void slotPickBuddyIcon();
void slotStatusChanged(int index);
+ void slotSetStatus(int statusId);
private:
+ PurpleStatusType *find_status_type_by_index(const PurpleAccount *account,
+ gint active);
+
QComboBox *statusSelector;
QLabel *buddyIcon;