~awn-core/awn/core-icons

« back to all changes in this revision

Viewing changes to src/awn-applet-manager.c

Merge from <lp:~malept/awn/0.4-libdesktop-agnostic>, revision 847.

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
 
24
24
#include <libawn/libawn.h>
25
25
#include <libawn/awn-utils.h>
26
 
#include <math.h>
27
26
 
28
27
#include "awn-defines.h"
29
28
#include "awn-applet-manager.h"
41
40
 
42
41
struct _AwnAppletManagerPrivate
43
42
{
44
 
  AwnConfigClient *client;
 
43
  DesktopAgnosticConfigClient *client;
45
44
 
46
45
  AwnOrientation   orient;
47
46
  gint             offset;
114
113
{
115
114
  AwnAppletManager        *manager;
116
115
  AwnAppletManagerPrivate *priv;
117
 
  AwnConfigBridge         *bridge;
 
116
  GValueArray *empty_array;
118
117
  
119
118
  priv = AWN_APPLET_MANAGER_GET_PRIVATE (object);
120
119
  manager = AWN_APPLET_MANAGER (object);
121
120
 
122
 
  /* Hook everything up the config client */
123
 
  bridge = awn_config_bridge_get_default ();
 
121
  /* Hook everything up to the config client */
124
122
 
125
 
  awn_config_bridge_bind (bridge, priv->client,
126
 
                          AWN_GROUP_PANEL, AWN_PANEL_ORIENT,
127
 
                          object, "orient");
128
 
  awn_config_bridge_bind (bridge, priv->client,
129
 
                          AWN_GROUP_PANEL, AWN_PANEL_SIZE,
130
 
                          object, "size");
131
 
  awn_config_bridge_bind (bridge, priv->client,
132
 
                          AWN_GROUP_PANEL, AWN_PANEL_OFFSET,
133
 
                          object, "offset");
134
 
  awn_config_bridge_bind_list (bridge, priv->client,
135
 
                               AWN_GROUP_PANEL, AWN_PANEL_APPLET_LIST,
136
 
                               AWN_CONFIG_CLIENT_LIST_TYPE_STRING,
137
 
                               object, "applet_list");
138
 
  awn_config_bridge_bind_list (bridge, priv->client,
139
 
                               AWN_GROUP_PANEL, AWN_PANEL_UA_LIST,
140
 
                               AWN_CONFIG_CLIENT_LIST_TYPE_STRING,
141
 
                               object, "ua_list");
142
 
  awn_config_bridge_bind_list (bridge, priv->client,
143
 
                               AWN_GROUP_PANEL, AWN_PANEL_UA_ACTIVE_LIST,
144
 
                               AWN_CONFIG_CLIENT_LIST_TYPE_STRING,
145
 
                               object, "ua_active_list");
 
123
  desktop_agnostic_config_client_bind (priv->client,
 
124
                                       AWN_GROUP_PANEL, AWN_PANEL_ORIENT,
 
125
                                       object, "orient", TRUE,
 
126
                                       DESKTOP_AGNOSTIC_CONFIG_BIND_METHOD_FALLBACK,
 
127
                                       NULL);
 
128
  desktop_agnostic_config_client_bind (priv->client,
 
129
                                       AWN_GROUP_PANEL, AWN_PANEL_SIZE,
 
130
                                       object, "size", TRUE,
 
131
                                       DESKTOP_AGNOSTIC_CONFIG_BIND_METHOD_FALLBACK,
 
132
                                       NULL);
 
133
  desktop_agnostic_config_client_bind (priv->client,
 
134
                                       AWN_GROUP_PANEL, AWN_PANEL_OFFSET,
 
135
                                       object, "offset", TRUE,
 
136
                                       DESKTOP_AGNOSTIC_CONFIG_BIND_METHOD_FALLBACK,
 
137
                                       NULL);
 
138
  desktop_agnostic_config_client_bind (priv->client,
 
139
                                       AWN_GROUP_PANEL, AWN_PANEL_APPLET_LIST,
 
140
                                       object, "applet_list", TRUE,
 
141
                                       DESKTOP_AGNOSTIC_CONFIG_BIND_METHOD_FALLBACK,
 
142
                                       NULL);
 
143
  desktop_agnostic_config_client_bind (priv->client,
 
144
                                       AWN_GROUP_PANEL, AWN_PANEL_UA_LIST,
 
145
                                       object, "ua_list", TRUE,
 
146
                                       DESKTOP_AGNOSTIC_CONFIG_BIND_METHOD_FALLBACK,
 
147
                                       NULL);
 
148
  desktop_agnostic_config_client_bind (priv->client,
 
149
                                       AWN_GROUP_PANEL, AWN_PANEL_UA_ACTIVE_LIST,
 
150
                                       object, "ua_active_list", TRUE,
 
151
                                       DESKTOP_AGNOSTIC_CONFIG_BIND_METHOD_FALLBACK,
 
152
                                       NULL);
146
153
  /*
147
154
  ua_active_list should be empty when awn starts...
148
155
   */
149
 
  awn_config_client_set_list (priv->client,AWN_GROUP_PANEL, AWN_PANEL_UA_ACTIVE_LIST,
150
 
                               AWN_CONFIG_CLIENT_LIST_TYPE_STRING,
151
 
                               NULL, NULL);
 
156
  empty_array = g_value_array_new (0);
 
157
  desktop_agnostic_config_client_set_list (priv->client,
 
158
                                           AWN_GROUP_PANEL, AWN_PANEL_UA_ACTIVE_LIST,
 
159
                                           empty_array, NULL);
 
160
  g_value_array_free (empty_array);
152
161
}
153
162
 
154
163
static void
180
189
  switch (prop_id)
181
190
  {
182
191
    case PROP_CLIENT:
183
 
      g_value_set_pointer (value, priv->client);
 
192
      g_value_set_object (value, priv->client);
184
193
      break;
185
194
    case PROP_ORIENT:
186
195
      g_value_set_int (value, priv->orient);
192
201
      g_value_set_int (value, priv->size);
193
202
      break;
194
203
    case PROP_APPLET_LIST:
195
 
      g_value_set_pointer (value, priv->applet_list);
 
204
      g_value_take_boxed (value, awn_utils_gslist_to_gvaluearray (priv->applet_list));
196
205
      break;
197
206
    case PROP_UA_LIST:
198
 
      g_value_set_pointer (value, priv->ua_list);
 
207
      g_value_take_boxed (value, awn_utils_gslist_to_gvaluearray (priv->ua_list));
199
208
      break;
200
209
    case PROP_UA_ACTIVE_LIST:
201
 
      g_value_set_pointer (value, priv->ua_active_list);
 
210
      g_value_take_boxed (value, awn_utils_gslist_to_gvaluearray (priv->ua_active_list));
202
211
      break;
203
212
    case PROP_EXPANDS:
204
213
      g_value_set_boolean (value, priv->expands);
208
217
  }
209
218
}
210
219
 
 
220
/**
 
221
 * Sets a an GSList<string> property from a GValueArray.
 
222
 */
 
223
static void
 
224
set_list_property (const GValue *value, GSList **list)
 
225
{
 
226
  GValueArray *array;
 
227
 
 
228
  free_list (*list);
 
229
  array = (GValueArray*)g_value_get_boxed (value);
 
230
  if (array)
 
231
  {
 
232
    for (guint i = 0; i < array->n_values; i++)
 
233
    {
 
234
      GValue *val = g_value_array_get_nth (array, i);
 
235
      *list = g_slist_append (*list, g_value_dup_string (val));
 
236
    }
 
237
    // don't free array, it will be done automatically
 
238
  }
 
239
}
 
240
 
211
241
static void
212
242
awn_applet_manager_set_property (GObject      *object,
213
243
                         guint         prop_id,
223
253
  switch (prop_id)
224
254
  {
225
255
    case PROP_CLIENT:
226
 
      priv->client =  g_value_get_pointer (value);
 
256
      priv->client =  g_value_get_object (value);
227
257
      break;
228
258
    case PROP_ORIENT:
229
259
      awn_applet_manager_set_orient (manager, g_value_get_int (value));
235
265
      awn_applet_manager_set_size (manager, g_value_get_int (value));
236
266
      break;
237
267
    case PROP_APPLET_LIST:
238
 
      free_list (priv->applet_list);
239
 
      priv->applet_list = g_value_get_pointer (value);
 
268
      set_list_property (value, &priv->applet_list);
240
269
      awn_applet_manager_refresh_applets (manager);
241
270
      break;
242
271
    case PROP_UA_LIST:
243
 
      free_list (priv->ua_list);
244
 
      priv->ua_list = g_value_get_pointer (value);
 
272
      set_list_property (value, &priv->ua_list);
245
273
      awn_applet_manager_refresh_applets (manager);
246
274
      break;
247
275
    case PROP_UA_ACTIVE_LIST:
248
 
      free_list (priv->ua_active_list);
249
 
      priv->ua_active_list = g_value_get_pointer (value);
 
276
      set_list_property (value, &priv->ua_active_list);
250
277
      awn_applet_manager_refresh_applets (manager);
251
 
      break;      
 
278
      break;
252
279
    default:
253
280
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
254
281
  }
278
305
    priv->klass = NULL;
279
306
  }
280
307
 
 
308
  desktop_agnostic_config_client_unbind_all_for_object (priv->client,
 
309
                                                        object, NULL);
 
310
 
281
311
  G_OBJECT_CLASS (awn_applet_manager_parent_class)->dispose (object);
282
312
}
283
313
 
298
328
  /* Add properties to the class */
299
329
  g_object_class_install_property (obj_class,
300
330
    PROP_CLIENT,
301
 
    g_param_spec_pointer ("client",
302
 
                          "Client",
303
 
                          "The AwnConfigClient",
304
 
                          G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 
331
    g_param_spec_object ("client",
 
332
                         "Client",
 
333
                         "The configuration client",
 
334
                         DESKTOP_AGNOSTIC_CONFIG_TYPE_CLIENT,
 
335
                         G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
305
336
 
306
337
  g_object_class_install_property (obj_class,
307
338
    PROP_ORIENT,
329
360
 
330
361
  g_object_class_install_property (obj_class,
331
362
    PROP_APPLET_LIST,
332
 
    g_param_spec_pointer ("applet_list",
333
 
                          "Applet List",
334
 
                          "The list of applets for this panel",
335
 
                          G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 
363
    g_param_spec_boxed ("applet_list",
 
364
                        "Applet List",
 
365
                        "The list of applets for this panel",
 
366
                        G_TYPE_VALUE_ARRAY,
 
367
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
336
368
 
337
369
  g_object_class_install_property (obj_class,
338
370
    PROP_UA_LIST,
339
 
    g_param_spec_pointer ("ua_list",
340
 
                          "UA List",
341
 
                          "The rememebered screenlet positions for this panel",
342
 
                          G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 
371
    g_param_spec_boxed ("ua_list",
 
372
                        "UA List",
 
373
                        "The remembered screenlet positions for this panel",
 
374
                        G_TYPE_VALUE_ARRAY,
 
375
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
343
376
 
344
377
  g_object_class_install_property (obj_class,
345
378
    PROP_UA_ACTIVE_LIST,
346
 
    g_param_spec_pointer ("ua-active-list",
347
 
                          "UA Active List",
348
 
                          "The list of active screenlets for this panel",
349
 
                          G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 
379
    g_param_spec_boxed ("ua-active-list",
 
380
                        "UA Active List",
 
381
                        "The list of active screenlets for this panel",
 
382
                        G_TYPE_VALUE_ARRAY,
 
383
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
350
384
 
351
385
  g_object_class_install_property (obj_class,
352
386
    PROP_EXPANDS,
396
430
}
397
431
 
398
432
GtkWidget *
399
 
awn_applet_manager_new_from_config (AwnConfigClient *client)
 
433
awn_applet_manager_new_from_config (DesktopAgnosticConfigClient *client)
400
434
{
401
435
  GtkWidget *manager;
402
436
  
605
639
  {
606
640
    g_slist_free (list);
607
641
  }
 
642
  list = NULL;
608
643
}
609
644
 
610
645
/*
872
907
  gchar * ua_list_entry = NULL;
873
908
  GtkWidget  *ua_alignment;
874
909
  double ua_ratio;  
 
910
  GValueArray *array;
875
911
 
876
912
  /*
877
913
   Is there an entry in ua_list for this particular screenlet instance(name).
949
985
      i--;
950
986
    }
951
987
  }
952
 
  awn_config_client_set_list (priv->client,AWN_GROUP_PANEL, AWN_PANEL_UA_LIST,
953
 
                               AWN_CONFIG_CLIENT_LIST_TYPE_STRING,
954
 
                               priv->ua_list, NULL);
 
988
  array = awn_utils_gslist_to_gvaluearray (priv->ua_list);
 
989
  desktop_agnostic_config_client_set_list (priv->client,
 
990
                                           AWN_GROUP_PANEL, AWN_PANEL_UA_LIST,
 
991
                                           array, NULL);
 
992
  g_value_array_free (array);
955
993
  /*Add our newly active screenlet to thend of the active list */
956
994
  priv->ua_active_list = g_slist_append (priv->ua_active_list,g_strdup(ua_list_entry));  
957
 
  awn_config_client_set_list (priv->client,AWN_GROUP_PANEL, AWN_PANEL_UA_ACTIVE_LIST,
958
 
                               AWN_CONFIG_CLIENT_LIST_TYPE_STRING,
959
 
                               priv->ua_active_list, NULL);
 
995
  array = awn_utils_gslist_to_gvaluearray (priv->ua_active_list);
 
996
  desktop_agnostic_config_client_set_list (priv->client,
 
997
                                           AWN_GROUP_PANEL,
 
998
                                           AWN_PANEL_UA_ACTIVE_LIST,
 
999
                                           array, NULL);
 
1000
  g_value_array_free (array);
960
1001
  
961
1002
  return TRUE;
962
1003
}