~tualatrix/ubuntu-tweak/ubuntu-packing

« back to all changes in this revision

Viewing changes to src/compiz_page.c

  • Committer: tualatrix
  • Date: 2007-11-08 15:07:03 UTC
  • Revision ID: git-v1:8d117e376f9c8db00737c22904dccb48f7aac788
add the new sources of Ubuntu Tweak 0.2

git-svn-id: https://ubuntu-tweak.googlecode.com/svn/trunk@61 89e9d5ea-4437-0410-aedb-dd2c2f29ea1f

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifdef HAVE_CONFIG_H
 
2
#  include <config.h>
 
3
#endif
 
4
 
 
5
#include "ubuntu-tweak.h"
 
6
 
 
7
static const gchar *keys_of_plugins_with_edge[]={
 
8
        "/apps/compiz/plugins/expo/allscreens/options/expo_edge",
 
9
        "/apps/compiz/plugins/scale/allscreens/options/initiate_edge",
 
10
        "/apps/compiz/plugins/rotate/allscreens/options/rotate_flip_left_edge",
 
11
        "/apps/compiz/plugins/rotate/allscreens/options/rotate_flip_right_edge",
 
12
};
 
13
 
 
14
static const gchar *names_of_plugins_with_edge[]={
 
15
        "expo",
 
16
        "initiate",
 
17
        "rotate_flip_left_edge",
 
18
        "rotate_flip_right_edge",
 
19
};
 
20
        
 
21
static GtkWidget *create_checkbutton_wobby_menu(gchar *label,gchar *key);
 
22
static GtkWidget *create_checkbutton_snap_windows(gchar *label);
 
23
static GSList   *get_active_plugins(GConfClient *client);
 
24
 
 
25
static void     wobby_checkbutton_toggeled(GtkWidget *checkbutton,gchar *key);
 
26
static void     snap_checkbutton_toggeled(GtkWidget *checkbutton, gpointer data);
 
27
static void     cb_combo_box_changed(GtkWidget *combobox,gchar *edge);
 
28
static void     remove_edge(gchar *keys_of_plugins_with_edge,gchar *edge);
 
29
static void     add_edge_base(gchar *keys_of_plugins_with_edge,gchar *edge);
 
30
static void     change_edge(GtkWidget *combobox,gchar *edge);
 
31
static void     add_edge(GtkWidget *combobox,gchar *edge);
 
32
 
 
33
GtkWidget *create_edge_combo_box(gchar *edge)
 
34
{
 
35
        GtkWidget       *combobox;
 
36
        GConfClient     *client;
 
37
        GSList          *edge_list=NULL;
 
38
        GSList          *plugins_list=NULL;
 
39
        gint            active_plugins;
 
40
        guint           length;
 
41
        gint            i;
 
42
        guint           j;
 
43
 
 
44
        combobox=gtk_combo_box_new_text();
 
45
        //g_object_set_data(G_OBJECT(combobox),"previous","NULL");
 
46
        gtk_combo_box_append_text(GTK_COMBO_BOX(combobox),"展示桌面");
 
47
        gtk_combo_box_append_text(GTK_COMBO_BOX(combobox),"排列窗口");
 
48
        gtk_combo_box_append_text(GTK_COMBO_BOX(combobox),"转到上一面");
 
49
        gtk_combo_box_append_text(GTK_COMBO_BOX(combobox),"转到下一面");
 
50
        gtk_combo_box_append_text(GTK_COMBO_BOX(combobox),"----");
 
51
 
 
52
        gtk_combo_box_set_active(GTK_COMBO_BOX(combobox),4);
 
53
 
 
54
        client=gconf_client_get_default();
 
55
 
 
56
        plugins_list=get_active_plugins(client);
 
57
 
 
58
        for(i=0;i<4;i++)
 
59
        {
 
60
                /*从key值中获得edge的列表*/
 
61
                edge_list=gconf_client_get_list(client,
 
62
                                        keys_of_plugins_with_edge[i],
 
63
                                        GCONF_VALUE_STRING,
 
64
                                        NULL);
 
65
        
 
66
 
 
67
 
 
68
                /*将获得的列表与传入的edge值进行对比,吻合则设置combobox为活动状态*/
 
69
                for(length=g_slist_length(edge_list),j=0;j<length;j++)
 
70
                {
 
71
                        gchar *temp=g_slist_nth_data(edge_list,j);
 
72
 
 
73
                        if(!g_ascii_strcasecmp(edge,temp)){
 
74
 
 
75
                                gtk_combo_box_set_active(GTK_COMBO_BOX(combobox),i);
 
76
                                g_print("稳合了%s!\n",edge);
 
77
                                g_object_set_data(G_OBJECT(combobox),"previous",names_of_plugins_with_edge[i]);
 
78
 
 
79
                                g_free(temp);
 
80
                                
 
81
                                break;
 
82
                        }
 
83
 
 
84
                        g_free(temp);
 
85
                } 
 
86
        }
 
87
 
 
88
        g_print("设置好了,现在的设定是%s!\n",g_object_get_data(G_OBJECT(combobox),"previous"));
 
89
 
 
90
        g_signal_connect(G_OBJECT(combobox),"changed",G_CALLBACK(cb_combo_box_changed),edge);
 
91
        
 
92
        g_slist_free(edge_list);
 
93
        g_object_unref(client);
 
94
 
 
95
        return combobox;
 
96
}
 
97
 
 
98
GtkWidget *create_compiz_page()
 
99
{
 
100
        GConfClient *client;
 
101
        gchar *wallpaper;
 
102
        GdkPixbuf *pixbuf;
 
103
        GtkWidget *main_vbox;
 
104
        GtkWidget *vbox;
 
105
        GtkWidget *hbox;
 
106
        GtkWidget *label;
 
107
        GtkWidget *snapping_checkbutton;
 
108
        GtkWidget *movewobby_checkbutton;
 
109
        GtkWidget *checkbutton;
 
110
        GtkWidget *combobox;
 
111
        GtkWidget *image;
 
112
 
 
113
        main_vbox=gtk_vbox_new(FALSE,10);
 
114
        gtk_widget_show(main_vbox);
 
115
        gtk_container_set_border_width(GTK_CONTAINER(main_vbox),5);
 
116
 
 
117
        label=gtk_label_new(NULL);
 
118
        gtk_label_set_markup(GTK_LABEL(label),_("<b>System Security options</b>"));
 
119
        gtk_misc_set_alignment(GTK_MISC(label),0,0);
 
120
        gtk_widget_show(label);
 
121
        gtk_box_pack_start(GTK_BOX(main_vbox),label,FALSE,FALSE,0);
 
122
 
 
123
        hbox=gtk_hbox_new(FALSE,0);
 
124
        gtk_box_pack_start(GTK_BOX(main_vbox),hbox,FALSE,FALSE,0);
 
125
 
 
126
        vbox=gtk_vbox_new(FALSE,0);
 
127
        gtk_box_pack_start(GTK_BOX(hbox),vbox,FALSE,FALSE,0);
 
128
 
 
129
        combobox=create_edge_combo_box("TopLeft");
 
130
        gtk_box_pack_start(GTK_BOX(vbox),combobox,FALSE,FALSE,0);
 
131
 
 
132
        combobox=create_edge_combo_box("BottomLeft");
 
133
        gtk_box_pack_end(GTK_BOX(vbox),combobox,FALSE,FALSE,0);
 
134
 
 
135
        client=gconf_client_get_default();
 
136
        wallpaper=gconf_client_get_string(client,
 
137
                                "/desktop/gnome/background/picture_filename",
 
138
                                NULL);
 
139
 
 
140
        if(!g_ascii_strcasecmp("",wallpaper)){
 
141
                pixbuf=gdk_pixbuf_new_from_file_at_size("/usr/share/backgrounds/warty-final-ubuntu.png",
 
142
                                160,
 
143
                                100,
 
144
                                NULL);
 
145
                        g_message("wallpaper is %s\n",wallpaper);
 
146
        }else{
 
147
                pixbuf=gdk_pixbuf_new_from_file_at_size(wallpaper,
 
148
                                                160,
 
149
                                                100,
 
150
                                                NULL);
 
151
        }
 
152
 
 
153
        image=gtk_image_new_from_pixbuf(pixbuf);
 
154
        gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,0);
 
155
 
 
156
        vbox=gtk_vbox_new(FALSE,0);
 
157
        gtk_box_pack_start(GTK_BOX(hbox),vbox,FALSE,FALSE,0);
 
158
 
 
159
        combobox=create_edge_combo_box("TopRight");
 
160
        gtk_box_pack_start(GTK_BOX(vbox),combobox,FALSE,FALSE,0);
 
161
 
 
162
        combobox=create_edge_combo_box("BottomRight");
 
163
        gtk_box_pack_end(GTK_BOX(vbox),combobox,FALSE,FALSE,0);
 
164
 
 
165
        vbox=gtk_vbox_new(FALSE,0);
 
166
        gtk_box_pack_start(GTK_BOX(main_vbox),vbox,FALSE,FALSE,0);
 
167
 
 
168
        snapping_checkbutton=create_checkbutton_snap_windows("开启粘性窗口");
 
169
        gtk_box_pack_start(GTK_BOX(vbox),snapping_checkbutton,TRUE,TRUE,0);
 
170
 
 
171
        checkbutton=create_checkbutton_wobby_menu("开启弹性菜单","/apps/compiz/plugins/wobbly/screen0/options/map_effect");
 
172
        gtk_box_pack_start(GTK_BOX(vbox),checkbutton,TRUE,TRUE,0);
 
173
 
 
174
        checkbutton=create_checkbutton_wobby_menu("最大化时弹性效果","/apps/compiz/plugins/wobbly/screen0/options/maximize_effect");
 
175
        gtk_box_pack_start(GTK_BOX(vbox),checkbutton,TRUE,TRUE,0);
 
176
 
 
177
        movewobby_checkbutton=create_checkbutton_wobby_menu("移动窗口时启用摇晃","/apps/compiz/plugins/wobbly/screen0/options/move_window_match");
 
178
        g_object_set_data(G_OBJECT(movewobby_checkbutton),"disable",snapping_checkbutton);
 
179
        gtk_box_pack_start(GTK_BOX(vbox),movewobby_checkbutton,TRUE,TRUE,0);
 
180
 
 
181
        vbox=gtk_vbox_new(FALSE,0);
 
182
        gtk_box_pack_start(GTK_BOX(main_vbox),vbox,FALSE,FALSE,0);
 
183
 
 
184
   GtkWidget *radio1, *radio2;
 
185
   
 
186
   /* Create a radio button with a GtkEntry widget */
 
187
   radio1 = gtk_radio_button_new_with_label(NULL,"使用桌面墙");
 
188
   
 
189
   /* Create a radio button with a label */
 
190
   radio2 = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (radio1),"使用桌面立方体.");
 
191
   
 
192
   /* Pack them into a box, then show all the widgets */
 
193
   gtk_box_pack_start (GTK_BOX (vbox), radio1, TRUE, TRUE, 2);
 
194
   gtk_box_pack_start (GTK_BOX (vbox), radio2, TRUE, TRUE, 2);
 
195
 
 
196
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio2),TRUE);
 
197
 
 
198
        checkbutton=gtk_check_button_new_with_label("开启立方体倒影");
 
199
        gtk_box_pack_start(GTK_BOX(vbox),checkbutton,TRUE,TRUE,0);
 
200
 
 
201
        g_object_unref(client);
 
202
 
 
203
        return main_vbox; 
 
204
}
 
205
 
 
206
GtkWidget *create_checkbutton_wobby_menu(gchar *label,gchar *key)
 
207
{
 
208
        GtkWidget *checkbutton;
 
209
        GConfValue *value;
 
210
        GConfClient *client;
 
211
        GSList *list=NULL;
 
212
        gboolean bool;
 
213
        guint length,j;
 
214
        gint map_effect;
 
215
 
 
216
        checkbutton=gtk_check_button_new_with_label(label);
 
217
        g_signal_connect(G_OBJECT(checkbutton),"toggled",G_CALLBACK(wobby_checkbutton_toggeled),key);
 
218
 
 
219
        client=gconf_client_get_default();
 
220
 
 
221
        list=get_active_plugins(client);
 
222
 
 
223
        for(length=g_slist_length(list),j=0;j<length;j++)
 
224
        {
 
225
                gchar *temp=g_slist_nth_data(list,j);
 
226
 
 
227
                if(!g_ascii_strcasecmp("wobbly",temp)){
 
228
 
 
229
                        GString *match;
 
230
                        
 
231
                        value=gconf_client_get(client,key,NULL);
 
232
                        
 
233
                        if(value->type==GCONF_VALUE_INT){
 
234
 
 
235
                                map_effect=gconf_value_get_int(value);
 
236
 
 
237
                                match=g_string_new(gconf_client_get_string(client,
 
238
                                        "/apps/compiz/plugins/wobbly/screen0/options/map_window_match",
 
239
                                        NULL));
 
240
 
 
241
                                if(map_effect==1&&match->len>=4){
 
242
 
 
243
                                        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton),TRUE);
 
244
                                }
 
245
 
 
246
                                g_string_free(match,TRUE);
 
247
                        }
 
248
                        else if(value->type==GCONF_VALUE_BOOL){
 
249
                                
 
250
                                bool=gconf_value_get_bool(value);
 
251
                                
 
252
                                if(bool){
 
253
                                        
 
254
                                        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton),TRUE);
 
255
                                }
 
256
                        }
 
257
                        else if(value->type == GCONF_VALUE_STRING){
 
258
                        
 
259
                                match = g_string_new(gconf_value_get_string(value));
 
260
 
 
261
                                if(match->len>=4){
 
262
                                        
 
263
                                        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton),TRUE);
 
264
                                }
 
265
                        }
 
266
 
 
267
                        g_free(temp);
 
268
 
 
269
                        break;
 
270
                }
 
271
 
 
272
                g_free(temp);
 
273
        } 
 
274
 
 
275
        g_slist_free(list);
 
276
        g_object_unref(client);
 
277
 
 
278
        return checkbutton;
 
279
}
 
280
 
 
281
void wobby_checkbutton_toggeled(GtkWidget *checkbutton,
 
282
                                gchar *key)
 
283
{
 
284
        GConfClient *client;
 
285
        GConfValue *value;
 
286
        GSList *list=NULL;
 
287
        gboolean bool;
 
288
        gint j,length;
 
289
        
 
290
        bool=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton));
 
291
        client=gconf_client_get_default();
 
292
        list=gconf_client_get_list(client,
 
293
                        "/apps/compiz/general/allscreens/options/active_plugins",
 
294
                        GCONF_VALUE_STRING,
 
295
                        NULL);
 
296
 
 
297
        if(g_object_get_data(G_OBJECT(checkbutton),"disable")){
 
298
                g_message("哈哈!我要关掉某个选项了!\n");
 
299
 
 
300
                if(bool){
 
301
                        gtk_widget_set_sensitive(GTK_WIDGET(g_object_get_data(G_OBJECT(checkbutton),"disable")),FALSE);
 
302
 
 
303
                        if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(g_object_get_data(G_OBJECT(checkbutton),"disable")))){
 
304
 
 
305
                                length=g_slist_length(list);
 
306
 
 
307
                                for(j=0;j<length;j++)
 
308
                                {
 
309
                                        gconstpointer temp=g_slist_nth_data(list,j);
 
310
 
 
311
                                        if(!g_ascii_strcasecmp("snap",temp)){
 
312
 
 
313
                                                list=g_slist_remove(list,temp);
 
314
                        
 
315
                                                gconf_client_set_list(client,
 
316
                                                        "/apps/compiz/general/allscreens/options/active_plugins",
 
317
                                                        GCONF_VALUE_STRING,
 
318
                                                        list,
 
319
                                                        NULL);
 
320
 
 
321
                                                break;
 
322
                                        }
 
323
 
 
324
                                        temp=NULL;
 
325
                                }
 
326
                        }
 
327
                }else{
 
328
                        gtk_widget_set_sensitive(GTK_WIDGET(g_object_get_data(G_OBJECT(checkbutton),"disable")),TRUE);
 
329
 
 
330
                }
 
331
        }
 
332
 
 
333
        if(bool==TRUE){
 
334
                list=g_slist_append(list,"wobbly");
 
335
                gconf_client_set_list(client,
 
336
                        "/apps/compiz/general/allscreens/options/active_plugins",
 
337
                        GCONF_VALUE_STRING,
 
338
                        list,
 
339
                        NULL);
 
340
 
 
341
                value=gconf_client_get(client,key,NULL);
 
342
 
 
343
                if(value->type==GCONF_VALUE_INT){
 
344
 
 
345
                        gconf_client_set_int(client,key,1,NULL);
 
346
                        gconf_client_set_string(client,
 
347
                                        "/apps/compiz/plugins/wobbly/screen0/options/map_window_match",
 
348
                                        "Splash | DropdownMenu | PopupMenu | Tooltip | Notification | Combo | Dnd | Unknown",NULL);
 
349
 
 
350
                }
 
351
                else if(value->type==GCONF_VALUE_BOOL){
 
352
                        
 
353
                        gconf_client_set_bool(client,key,TRUE,NULL);
 
354
 
 
355
                }
 
356
                else if(value->type == GCONF_VALUE_STRING){
 
357
                        
 
358
                        gconf_client_set_string(client,key,"Toolbar | Menu | Utility | Dialog | Normal | Unknown",NULL);
 
359
                }       
 
360
        }else{
 
361
                list=g_slist_remove(list,"wobbly");
 
362
                gconf_client_set_list(client,
 
363
                        "/apps/compiz/general/allscreens/options/active_plugins",
 
364
                        GCONF_VALUE_STRING,
 
365
                        list,
 
366
                        NULL);
 
367
 
 
368
                value=gconf_client_get(client,key,NULL);
 
369
 
 
370
                if(value->type==GCONF_VALUE_INT){
 
371
 
 
372
                        gconf_client_set_int(client,key,0,NULL);
 
373
 
 
374
                }
 
375
                else if(value->type==GCONF_VALUE_BOOL){
 
376
                        
 
377
                        gconf_client_set_bool(client,key,FALSE,NULL);
 
378
                        
 
379
                }
 
380
                else if(value->type == GCONF_VALUE_STRING){
 
381
                        
 
382
                        gconf_client_set_string(client,key,"",NULL);
 
383
                }       
 
384
        }
 
385
 
 
386
        g_slist_free(list);
 
387
        g_object_unref(client);
 
388
}
 
389
 
 
390
GtkWidget *create_checkbutton_snap_windows(gchar *label)
 
391
{
 
392
        GtkWidget *checkbutton;
 
393
        GConfClient *client;
 
394
        GSList *list=NULL;
 
395
        guint length,j;
 
396
 
 
397
        checkbutton=gtk_check_button_new_with_label(label);
 
398
        client=gconf_client_get_default();
 
399
 
 
400
        list=gconf_client_get_list(client,
 
401
                                "/apps/compiz/general/allscreens/options/active_plugins",
 
402
                                GCONF_VALUE_STRING,
 
403
                                NULL);
 
404
        length=g_slist_length(list);
 
405
 
 
406
        for(j=0;j<length;j++)
 
407
        {
 
408
                gchar *temp=g_slist_nth_data(list,j);
 
409
 
 
410
                if(!g_ascii_strcasecmp("snap",temp)){
 
411
 
 
412
                        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton),TRUE);
 
413
 
 
414
                        break;
 
415
                }else{
 
416
                        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton),FALSE);
 
417
                }
 
418
 
 
419
                g_free(temp);
 
420
        }
 
421
 
 
422
        g_signal_connect(G_OBJECT(checkbutton),"toggled",G_CALLBACK(snap_checkbutton_toggeled),NULL);
 
423
 
 
424
        g_slist_free(list);
 
425
        g_object_unref(client);
 
426
 
 
427
        return checkbutton;
 
428
}
 
429
 
 
430
void snap_checkbutton_toggeled(GtkWidget *checkbutton,
 
431
                                gpointer data)
 
432
{
 
433
        GConfClient *client;
 
434
        GSList *list=NULL;
 
435
        gboolean bool;
 
436
        gconstpointer snap="snap";
 
437
        guint length,j;
 
438
        
 
439
        bool=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton));
 
440
        client=gconf_client_get_default();
 
441
        list=gconf_client_get_list(client,
 
442
                        "/apps/compiz/general/allscreens/options/active_plugins",
 
443
                        GCONF_VALUE_STRING,
 
444
                        NULL);
 
445
 
 
446
        g_print("操作前的长度:%d\n",g_slist_length(list));
 
447
/*      for(j=0;j<length;j++)
 
448
        {
 
449
                gchar *temp=g_slist_nth_data(list,j);
 
450
 
 
451
                if(!g_ascii_strcasecmp("snap",temp)){
 
452
 
 
453
                        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton),TRUE);
 
454
                        g_print("连接信号,原来是toggled!");
 
455
 
 
456
                        break;
 
457
                }else{
 
458
                        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton),FALSE);
 
459
                }
 
460
 
 
461
                g_free(temp);
 
462
        } 
 
463
*/
 
464
        if(bool==TRUE){
 
465
                //g_message("你叫我开启这个插件\n");
 
466
 
 
467
                list=g_slist_append(list,snap);
 
468
 
 
469
                gconf_client_set_list(client,
 
470
                        "/apps/compiz/general/allscreens/options/active_plugins",
 
471
                        GCONF_VALUE_STRING,
 
472
                        list,
 
473
                        NULL);
 
474
        }else{
 
475
                //g_message("你叫我关闭这个插件\n");
 
476
 
 
477
                length=g_slist_length(list);
 
478
 
 
479
                for(j=0;j<length;j++)
 
480
                {
 
481
                        gconstpointer temp=g_slist_nth_data(list,j);
 
482
 
 
483
                        if(!g_ascii_strcasecmp("snap",temp)){
 
484
 
 
485
                                list=g_slist_remove(list,temp);
 
486
                        
 
487
//                              g_message("the element is %s\n",temp);
 
488
 
 
489
                                gconf_client_set_list(client,
 
490
                                        "/apps/compiz/general/allscreens/options/active_plugins",
 
491
                                        GCONF_VALUE_STRING,
 
492
                                        list,
 
493
                                        NULL);
 
494
 
 
495
                                break;
 
496
                        }
 
497
 
 
498
                        temp=NULL;
 
499
                }
 
500
/*
 
501
                list=g_slist_remove(list,snap);
 
502
 
 
503
                gconf_client_set_list(client,
 
504
                        "/apps/compiz/general/allscreens/options/active_plugins",
 
505
                        GCONF_VALUE_STRING,
 
506
                        list,
 
507
                        NULL);
 
508
*/
 
509
        }
 
510
 
 
511
//      g_print("操作后的长度:%d\n",g_slist_length(list));
 
512
        g_slist_free(list);
 
513
        g_object_unref(client);
 
514
}
 
515
 
 
516
void cb_combo_box_changed(GtkWidget *combobox,gchar *edge)
 
517
{
 
518
        if(g_object_get_data(combobox,"previous")){
 
519
                g_message("先前的值是是%s,将把其删除,然后替换成新的\n",g_object_get_data(combobox,"previous"));
 
520
 
 
521
                change_edge(combobox,edge);
 
522
        }else{
 
523
                g_message("先前的值为空,将直接加入新的值\n");
 
524
                add_edge(combobox,edge);
 
525
        }
 
526
}
 
527
 
 
528
void change_edge(GtkWidget *combobox,gchar *edge)
 
529
{
 
530
        gchar *previous=g_object_get_data(combobox,"previous");
 
531
 
 
532
        g_print("锁定%s,开始移除....\n",previous);
 
533
 
 
534
        if(!g_ascii_strcasecmp("expo",previous)){
 
535
                remove_edge(keys_of_plugins_with_edge[0],edge);
 
536
                add_edge(combobox,edge);
 
537
        }
 
538
        else if(!g_ascii_strcasecmp("initiate",previous)){
 
539
                remove_edge(keys_of_plugins_with_edge[1],edge);
 
540
                add_edge(combobox,edge);
 
541
        }
 
542
        else if(!g_ascii_strcasecmp("rotate_flip_left_edge",previous)){
 
543
                remove_edge(keys_of_plugins_with_edge[2],edge);
 
544
                add_edge(combobox,edge);
 
545
        }
 
546
        else if(!g_ascii_strcasecmp("rotate_flip_right_edge",previous)){
 
547
                remove_edge(keys_of_plugins_with_edge[3],edge);
 
548
                add_edge(combobox,edge);
 
549
        }
 
550
 
 
551
}
 
552
 
 
553
void remove_edge(gchar *keys_of_plugins_with_edge,gchar *edge)
 
554
{
 
555
        GConfClient *client;
 
556
        GSList *edge_list=NULL;
 
557
        gint j,length;
 
558
        gconstpointer temp;
 
559
 
 
560
        client=gconf_client_get_default();
 
561
        
 
562
        edge_list=gconf_client_get_list(client,
 
563
                                keys_of_plugins_with_edge,
 
564
                                GCONF_VALUE_STRING,
 
565
                                NULL);
 
566
 
 
567
        length=g_slist_length(edge_list);
 
568
 
 
569
                for(j=0;j<length;j++)
 
570
                {
 
571
                        gconstpointer temp=g_slist_nth_data(edge_list,j);
 
572
 
 
573
                        if(!g_ascii_strcasecmp(edge,temp)){
 
574
                        
 
575
                                g_message("出来了!!!\n");
 
576
 
 
577
                                edge_list=g_slist_remove(edge_list,temp);
 
578
 
 
579
                                gconf_client_set_list(client,
 
580
                                                        keys_of_plugins_with_edge,
 
581
                                                        GCONF_VALUE_STRING,
 
582
                                                        edge_list,
 
583
                                                        NULL);
 
584
 
 
585
                                break;
 
586
                        }
 
587
 
 
588
                        temp=NULL;
 
589
                }
 
590
 
 
591
        g_object_unref(client);
 
592
        g_slist_free(edge_list);
 
593
}
 
594
 
 
595
void add_edge(GtkWidget *combobox,gchar *edge)
 
596
{
 
597
        int i;
 
598
 
 
599
        i=gtk_combo_box_get_active(GTK_COMBO_BOX(combobox));
 
600
 
 
601
        if(i==0){
 
602
                add_edge_base(keys_of_plugins_with_edge[0],edge);
 
603
                g_object_set_data(G_OBJECT(combobox),"previous",names_of_plugins_with_edge[0]);
 
604
        }
 
605
        else if(i==1){
 
606
                add_edge_base(keys_of_plugins_with_edge[1],edge);
 
607
                g_object_set_data(G_OBJECT(combobox),"previous",names_of_plugins_with_edge[1]);
 
608
        }
 
609
        else if(i==2){
 
610
                add_edge_base(keys_of_plugins_with_edge[2],edge);
 
611
                g_object_set_data(G_OBJECT(combobox),"previous",names_of_plugins_with_edge[2]);
 
612
        }
 
613
        else if(i==3){
 
614
                add_edge_base(keys_of_plugins_with_edge[3],edge);
 
615
                g_object_set_data(G_OBJECT(combobox),"previous",names_of_plugins_with_edge[3]);
 
616
        }
 
617
        else if(i==4){
 
618
                g_object_set_data(G_OBJECT(combobox),"previous",NULL);
 
619
        }
 
620
}
 
621
 
 
622
void add_edge_base(gchar *keys_of_plugins_with_edge,gchar *edge)
 
623
{
 
624
        GConfClient *client;
 
625
        GSList *edge_list=NULL;
 
626
        
 
627
        client=gconf_client_get_default();
 
628
        
 
629
        edge_list=gconf_client_get_list(client,
 
630
                                keys_of_plugins_with_edge,
 
631
                                GCONF_VALUE_STRING,
 
632
                                NULL);
 
633
        
 
634
        edge_list=g_slist_append(edge_list,edge);
 
635
 
 
636
        gconf_client_set_list(client,
 
637
                                keys_of_plugins_with_edge,
 
638
                                GCONF_VALUE_STRING,
 
639
                                edge_list,
 
640
                                NULL);
 
641
 
 
642
        g_object_unref(client);
 
643
        g_slist_free(edge_list);
 
644
}
 
645
 
 
646
GSList *get_active_plugins(GConfClient *client)
 
647
{
 
648
        GSList *list=NULL;
 
649
 
 
650
        list=gconf_client_get_list(client,
 
651
                        "/apps/compiz/general/allscreens/options/active_plugins",
 
652
                        GCONF_VALUE_STRING,
 
653
                        NULL);  
 
654
 
 
655
        return list;
 
656
}