static void awn_ua_alignment_list_change(GObject *object,GParamSpec *param_spec,gpointer user_data) { AwnUAAlignment * self = user_data; gint position; AwnUAAlignmentPrivate *priv = AWN_UA_ALIGNMENT_GET_PRIVATE (self); GSList * ua_active_list; g_object_get ( priv->applet_manager, "position",&position, "ua_active_list",&ua_active_list, NULL); GSList * search = g_slist_find_custom (ua_active_list, priv->ua_list_entry, (GCompareFunc)g_strcmp0); if (search) { g_debug ("Found... do not need to update %s",priv->ua_list_entry); } else { search = g_slist_find_custom (ua_active_list,priv->ua_list_entry,awn_ua_alignment_list_cmp); if (search) { g_debug ("Moving %s to %s",priv->ua_list_entry,(gchar*)search->data); GStrv tokens; gint pos = -1; g_free (priv->ua_list_entry); priv->ua_list_entry = g_strdup(search->data); tokens = g_strsplit (search->data,"::",2); if (tokens && tokens[1]) { pos = atoi (tokens[1]); } g_strfreev (tokens); if (pos != -1) { awn_applet_manager_add_widget(AWN_APPLET_MANAGER(priv->applet_manager), GTK_WIDGET (self), pos); } } else { g_debug ("looks like %s was removed from panel/ua_list",priv->ua_list_entry); /* aantn as expected this does not kill the screenlet. What is the best way to tell it that we want it to go away? */ awn_applet_manager_remove_widget(AWN_APPLET_MANAGER(priv->applet_manager), GTK_WIDGET (self)); gtk_widget_destroy (priv->socket); } } }
static gboolean awn_ua_alignment_plug_removed (GtkWidget * socket,AwnUAAlignment * self) { GSList * search; GSList * ua_active_list; GSList * orig_active_list; GSList * iter; DesktopAgnosticConfigClient *client; GValueArray *array; AwnUAAlignmentPrivate *priv = AWN_UA_ALIGNMENT_GET_PRIVATE (self); g_signal_handler_disconnect (priv->applet_manager,priv->notify_size_id); g_signal_handler_disconnect (priv->applet_manager,priv->notify_position_id); g_signal_handler_disconnect (priv->applet_manager,priv->notify_offset_id); g_signal_handler_disconnect (priv->applet_manager,priv->notify_ua_list_id); g_object_get ( priv->applet_manager, "ua_active_list",&orig_active_list, "client",&client, NULL); ua_active_list = g_slist_copy (orig_active_list); for (iter = ua_active_list;iter;iter = iter->next) { iter->data = g_strdup(iter->data); } search = g_slist_find_custom (ua_active_list,priv->ua_list_entry, (GCompareFunc)g_strcmp0); if (search) { ua_active_list = g_slist_delete_link (ua_active_list,search); } array = awn_utils_gslist_to_gvaluearray (ua_active_list); desktop_agnostic_config_client_set_list (client, AWN_GROUP_PANEL, AWN_PANEL_UA_ACTIVE_LIST, array, NULL); g_value_array_free (array); g_object_set (priv->applet_manager, "ua-active-list",ua_active_list, NULL); awn_applet_manager_remove_widget(AWN_APPLET_MANAGER(priv->applet_manager), GTK_WIDGET (self)); return FALSE; }
static gboolean _position_func (GtkWidget *window) { if (x_pos == current_pos) { is_positioning = FALSE; on_awn_applet_manager_size_allocate(window, NULL, AWN_APPLET_MANAGER(settings->appman) ); return FALSE; } else if (x_pos > current_pos) { current_pos++; } else { current_pos--; } // on_awn_applet_manager_size_allocate(window, NULL, AWN_APPLET_MANAGER(settings->appman) ); gtk_window_move(GTK_WINDOW(window), current_pos, y_pos); return TRUE; }