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;
}
예제 #3
0
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;
}