View | Details | Raw Unified | Return to bug 309058
Collapse All | Expand All

(-)main-menu/src/main-menu-ui.c (-80 / +81 lines)
Lines 38-43 Link Here
38
38
39
#include "tile.h"
39
#include "tile.h"
40
#include "application-tile.h"
40
#include "application-tile.h"
41
#include "bookmark-tile.h"
41
#include "document-tile.h"
42
#include "document-tile.h"
42
#include "directory-tile.h"
43
#include "directory-tile.h"
43
#include "system-tile.h"
44
#include "system-tile.h"
Lines 61-80 Link Here
61
#define FILE_MGR_OPEN_GCONF_KEY    ROOT_GCONF_DIR "/file-area/file_mgr_open_cmd"
62
#define FILE_MGR_OPEN_GCONF_KEY    ROOT_GCONF_DIR "/file-area/file_mgr_open_cmd"
62
#define APP_BLACKLIST_GCONF_KEY    ROOT_GCONF_DIR "/file-area/file_blacklist"
63
#define APP_BLACKLIST_GCONF_KEY    ROOT_GCONF_DIR "/file-area/file_blacklist"
63
64
64
#define LOCKDOWN_GCONF_DIR           ROOT_GCONF_DIR "/lock-down"
65
#define LOCKDOWN_GCONF_DIR                ROOT_GCONF_DIR "/lock-down"
65
#define MORE_LINK_VIS_GCONF_KEY      LOCKDOWN_GCONF_DIR "/application_browser_link_visible"
66
#define MORE_LINK_VIS_GCONF_KEY           LOCKDOWN_GCONF_DIR "/application_browser_link_visible"
66
#define SEARCH_VIS_GCONF_KEY         LOCKDOWN_GCONF_DIR "/search_area_visible"
67
#define SEARCH_VIS_GCONF_KEY              LOCKDOWN_GCONF_DIR "/search_area_visible"
67
#define STATUS_VIS_GCONF_KEY         LOCKDOWN_GCONF_DIR "/status_area_visible"
68
#define STATUS_VIS_GCONF_KEY              LOCKDOWN_GCONF_DIR "/status_area_visible"
68
#define SYSTEM_VIS_GCONF_KEY         LOCKDOWN_GCONF_DIR "/system_area_visible"
69
#define SYSTEM_VIS_GCONF_KEY              LOCKDOWN_GCONF_DIR "/system_area_visible"
69
#define SHOWABLE_TYPES_GCONF_KEY     LOCKDOWN_GCONF_DIR "/showable_file_types"
70
#define SHOWABLE_TYPES_GCONF_KEY          LOCKDOWN_GCONF_DIR "/showable_file_types"
70
#define MODIFIABLE_SYSTEM_GCONF_KEY  LOCKDOWN_GCONF_DIR "/user_modifiable_system_area"
71
#define MODIFIABLE_SYSTEM_GCONF_KEY       LOCKDOWN_GCONF_DIR "/user_modifiable_system_area"
71
#define MODIFIABLE_APPS_GCONF_KEY    LOCKDOWN_GCONF_DIR "/user_modifiable_apps"
72
#define MODIFIABLE_APPS_GCONF_KEY         LOCKDOWN_GCONF_DIR "/user_modifiable_apps"
72
#define MODIFIABLE_DOCS_GCONF_KEY    LOCKDOWN_GCONF_DIR "/user_modifiable_docs"
73
#define MODIFIABLE_DOCS_GCONF_KEY         LOCKDOWN_GCONF_DIR "/user_modifiable_docs"
73
#define MODIFIABLE_DIRS_GCONF_KEY    LOCKDOWN_GCONF_DIR "/user_modifiable_dirs"
74
#define MODIFIABLE_BOOKMARKS_GCONF_KEY    LOCKDOWN_GCONF_DIR "/user_modifiable_bookmarks"
74
#define DISABLE_TERMINAL_GCONF_KEY   "/desktop/gnome/lockdown/disable_command_line"
75
#define DISABLE_TERMINAL_GCONF_KEY        "/desktop/gnome/lockdown/disable_command_line"
75
#define PANEL_LOCKDOWN_GCONF_DIR     "/apps/panel/global"
76
#define PANEL_LOCKDOWN_GCONF_DIR          "/apps/panel/global"
76
#define DISABLE_LOGOUT_GCONF_KEY     PANEL_LOCKDOWN_GCONF_DIR "/disable_log_out"
77
#define DISABLE_LOGOUT_GCONF_KEY          PANEL_LOCKDOWN_GCONF_DIR "/disable_log_out"
77
#define DISABLE_LOCKSCREEN_GCONF_KEY PANEL_LOCKDOWN_GCONF_DIR "/disable_lock_screen"
78
#define DISABLE_LOCKSCREEN_GCONF_KEY      PANEL_LOCKDOWN_GCONF_DIR "/disable_lock_screen"
78
79
79
G_DEFINE_TYPE (MainMenuUI, main_menu_ui, G_TYPE_OBJECT)
80
G_DEFINE_TYPE (MainMenuUI, main_menu_ui, G_TYPE_OBJECT)
80
81
Lines 129-135 Link Here
129
	guint modifiable_system_gconf_mntr_id;
130
	guint modifiable_system_gconf_mntr_id;
130
	guint modifiable_apps_gconf_mntr_id;
131
	guint modifiable_apps_gconf_mntr_id;
131
	guint modifiable_docs_gconf_mntr_id;
132
	guint modifiable_docs_gconf_mntr_id;
132
	guint modifiable_dirs_gconf_mntr_id;
133
	guint modifiable_bookmarks_gconf_mntr_id;
133
	guint disable_term_gconf_mntr_id;
134
	guint disable_term_gconf_mntr_id;
134
	guint disable_logout_gconf_mntr_id;
135
	guint disable_logout_gconf_mntr_id;
135
	guint disable_lockscreen_gconf_mntr_id;
136
	guint disable_lockscreen_gconf_mntr_id;
Lines 142-162 Link Here
142
143
143
static void main_menu_ui_finalize (GObject *);
144
static void main_menu_ui_finalize (GObject *);
144
145
145
static void create_panel_button      (MainMenuUI *);
146
static void create_panel_button           (MainMenuUI *);
146
static void create_slab_window       (MainMenuUI *);
147
static void create_slab_window            (MainMenuUI *);
147
static void create_search_section    (MainMenuUI *);
148
static void create_search_section         (MainMenuUI *);
148
static void create_file_section      (MainMenuUI *);
149
static void create_file_section           (MainMenuUI *);
149
static void create_user_apps_section (MainMenuUI *);
150
static void create_user_apps_section      (MainMenuUI *);
150
static void create_rct_apps_section  (MainMenuUI *);
151
static void create_rct_apps_section       (MainMenuUI *);
151
static void create_user_docs_section (MainMenuUI *);
152
static void create_user_docs_section      (MainMenuUI *);
152
static void create_rct_docs_section  (MainMenuUI *);
153
static void create_rct_docs_section       (MainMenuUI *);
153
static void create_user_dirs_section (MainMenuUI *);
154
static void create_user_bookmarks_section (MainMenuUI *);
154
static void create_system_section    (MainMenuUI *);
155
static void create_system_section         (MainMenuUI *);
155
static void create_status_section    (MainMenuUI *);
156
static void create_status_section         (MainMenuUI *);
156
static void create_more_buttons      (MainMenuUI *);
157
static void create_more_buttons           (MainMenuUI *);
157
static void setup_file_tables        (MainMenuUI *);
158
static void setup_file_tables             (MainMenuUI *);
158
static void setup_bookmark_agents    (MainMenuUI *);
159
static void setup_bookmark_agents         (MainMenuUI *);
159
static void setup_lock_down          (MainMenuUI *);
160
static void setup_lock_down               (MainMenuUI *);
160
161
161
static void       select_page                (MainMenuUI *);
162
static void       select_page                (MainMenuUI *);
162
static void       update_limits              (MainMenuUI *);
163
static void       update_limits              (MainMenuUI *);
Lines 173-182 Link Here
173
static gboolean   app_is_in_blacklist        (const gchar *);
174
static gboolean   app_is_in_blacklist        (const gchar *);
174
175
175
static Tile *item_to_user_app_tile   (BookmarkItem *, gpointer);
176
static Tile *item_to_user_app_tile   (BookmarkItem *, gpointer);
177
static Tile *item_to_bookmark_tile   (BookmarkItem *, gpointer);
176
static Tile *item_to_recent_app_tile (BookmarkItem *, gpointer);
178
static Tile *item_to_recent_app_tile (BookmarkItem *, gpointer);
177
static Tile *item_to_user_doc_tile   (BookmarkItem *, gpointer);
179
static Tile *item_to_user_doc_tile   (BookmarkItem *, gpointer);
178
static Tile *item_to_recent_doc_tile (BookmarkItem *, gpointer);
180
static Tile *item_to_recent_doc_tile (BookmarkItem *, gpointer);
179
static Tile *item_to_dir_tile        (BookmarkItem *, gpointer);
180
static Tile *item_to_system_tile     (BookmarkItem *, gpointer);
181
static Tile *item_to_system_tile     (BookmarkItem *, gpointer);
181
static BookmarkItem *app_uri_to_item (const gchar *, gpointer);
182
static BookmarkItem *app_uri_to_item (const gchar *, gpointer);
182
static BookmarkItem *doc_uri_to_item (const gchar *, gpointer);
183
static BookmarkItem *doc_uri_to_item (const gchar *, gpointer);
Lines 237-243 Link Here
237
enum {
238
enum {
238
	APPS_PAGE,
239
	APPS_PAGE,
239
	DOCS_PAGE,
240
	DOCS_PAGE,
240
	DIRS_PAGE
241
	BOOKMARKS_PAGE
241
};
242
};
242
243
243
enum {
244
enum {
Lines 245-251 Link Here
245
	RCNT_APPS_TABLE,
246
	RCNT_APPS_TABLE,
246
	USER_DOCS_TABLE,
247
	USER_DOCS_TABLE,
247
	RCNT_DOCS_TABLE,
248
	RCNT_DOCS_TABLE,
248
	USER_DIRS_TABLE
249
	USER_BOOKMARKS_TABLE
249
};
250
};
250
251
251
enum {
252
enum {
Lines 277-302 Link Here
277
	priv->panel_button_xml = glade_xml_new (glade_xml_path, "slab-panel-button-root", NULL);
278
	priv->panel_button_xml = glade_xml_new (glade_xml_path, "slab-panel-button-root", NULL);
278
	g_free (glade_xml_path);
279
	g_free (glade_xml_path);
279
280
280
	setup_bookmark_agents    (this);
281
	setup_bookmark_agents         (this);
281
	create_panel_button      (this);
282
	create_panel_button           (this);
282
	create_slab_window       (this);
283
	create_slab_window            (this);
283
	create_search_section    (this);
284
	create_search_section         (this);
284
	create_file_section      (this);
285
	create_file_section           (this);
285
	create_user_apps_section (this);
286
	create_user_apps_section      (this);
286
	create_rct_apps_section  (this);
287
	create_rct_apps_section       (this);
287
	create_user_docs_section (this);
288
	create_user_docs_section      (this);
288
	create_rct_docs_section  (this);
289
	create_rct_docs_section       (this);
289
	create_user_dirs_section (this);
290
	create_user_bookmarks_section (this);
290
	create_system_section    (this);
291
	create_system_section         (this);
291
	create_status_section    (this);
292
	create_status_section         (this);
292
	create_more_buttons      (this);
293
	create_more_buttons           (this);
293
	setup_file_tables        (this);
294
	setup_file_tables             (this);
294
	setup_lock_down          (this);
295
	setup_lock_down               (this);
295
296
296
	bind_beagle_search_key  (this);
297
	bind_beagle_search_key        (this);
297
	update_limits           (this);
298
	update_limits                 (this);
298
	select_page             (this);
299
	select_page                   (this);
299
	apply_lockdown_settings (this);
300
	apply_lockdown_settings       (this);
300
301
301
	return this;
302
	return this;
302
}
303
}
Lines 339-373 Link Here
339
	priv->file_section                               = NULL;
340
	priv->file_section                               = NULL;
340
	priv->page_selectors [APPS_PAGE]                 = NULL;
341
	priv->page_selectors [APPS_PAGE]                 = NULL;
341
	priv->page_selectors [DOCS_PAGE]                 = NULL;
342
	priv->page_selectors [DOCS_PAGE]                 = NULL;
342
	priv->page_selectors [DIRS_PAGE]                 = NULL;
343
	priv->page_selectors [BOOKMARKS_PAGE]            = NULL;
343
	priv->notebook_page_ids [APPS_PAGE]              = 0;
344
	priv->notebook_page_ids [APPS_PAGE]              = 0;
344
	priv->notebook_page_ids [DOCS_PAGE]              = 0;
345
	priv->notebook_page_ids [DOCS_PAGE]              = 0;
345
	priv->notebook_page_ids [DIRS_PAGE]              = 0;
346
	priv->notebook_page_ids [BOOKMARKS_PAGE]         = 0;
346
347
347
	priv->file_tables [USER_APPS_TABLE]              = NULL;
348
	priv->file_tables [USER_APPS_TABLE]              = NULL;
348
	priv->file_tables [RCNT_APPS_TABLE]              = NULL;
349
	priv->file_tables [RCNT_APPS_TABLE]              = NULL;
349
	priv->file_tables [USER_DOCS_TABLE]              = NULL;
350
	priv->file_tables [USER_DOCS_TABLE]              = NULL;
350
	priv->file_tables [RCNT_DOCS_TABLE]              = NULL;
351
	priv->file_tables [RCNT_DOCS_TABLE]              = NULL;
351
	priv->file_tables [USER_DIRS_TABLE]              = NULL;
352
	priv->file_tables [USER_BOOKMARKS_TABLE]         = NULL;
352
	priv->table_sections [USER_APPS_TABLE]           = NULL;
353
	priv->table_sections [USER_APPS_TABLE]           = NULL;
353
	priv->table_sections [RCNT_APPS_TABLE]           = NULL;
354
	priv->table_sections [RCNT_APPS_TABLE]           = NULL;
354
	priv->table_sections [USER_DOCS_TABLE]           = NULL;
355
	priv->table_sections [USER_DOCS_TABLE]           = NULL;
355
	priv->table_sections [RCNT_DOCS_TABLE]           = NULL;
356
	priv->table_sections [RCNT_DOCS_TABLE]           = NULL;
356
	priv->table_sections [USER_DIRS_TABLE]           = NULL;
357
	priv->table_sections [USER_BOOKMARKS_TABLE]      = NULL;
357
	priv->allowable_types [USER_APPS_TABLE]          = TRUE;
358
	priv->allowable_types [USER_APPS_TABLE]          = TRUE;
358
	priv->allowable_types [RCNT_APPS_TABLE]          = TRUE;
359
	priv->allowable_types [RCNT_APPS_TABLE]          = TRUE;
359
	priv->allowable_types [USER_DOCS_TABLE]          = TRUE;
360
	priv->allowable_types [USER_DOCS_TABLE]          = TRUE;
360
	priv->allowable_types [RCNT_DOCS_TABLE]          = TRUE;
361
	priv->allowable_types [RCNT_DOCS_TABLE]          = TRUE;
361
	priv->allowable_types [USER_DIRS_TABLE]          = TRUE;
362
	priv->allowable_types [USER_BOOKMARKS_TABLE]     = TRUE;
362
363
363
	priv->sys_table                                  = NULL;
364
	priv->sys_table                                  = NULL;
364
365
365
	priv->more_buttons [APPS_PAGE]                   = NULL;
366
	priv->more_buttons [APPS_PAGE]                   = NULL;
366
	priv->more_buttons [DOCS_PAGE]                   = NULL;
367
	priv->more_buttons [DOCS_PAGE]                   = NULL;
367
	priv->more_buttons [DIRS_PAGE]                   = NULL;
368
	priv->more_buttons [BOOKMARKS_PAGE]              = NULL;
368
	priv->more_sections [APPS_PAGE]                  = NULL;
369
	priv->more_sections [APPS_PAGE]                  = NULL;
369
	priv->more_sections [DOCS_PAGE]                  = NULL;
370
	priv->more_sections [DOCS_PAGE]                  = NULL;
370
	priv->more_sections [DIRS_PAGE]                  = NULL;
371
	priv->more_sections [BOOKMARKS_PAGE]             = NULL;
371
372
372
	priv->max_total_items                            = 8;
373
	priv->max_total_items                            = 8;
373
374
Lines 386-392 Link Here
386
	priv->modifiable_system_gconf_mntr_id            = 0;
387
	priv->modifiable_system_gconf_mntr_id            = 0;
387
	priv->modifiable_apps_gconf_mntr_id              = 0;
388
	priv->modifiable_apps_gconf_mntr_id              = 0;
388
	priv->modifiable_docs_gconf_mntr_id              = 0;
389
	priv->modifiable_docs_gconf_mntr_id              = 0;
389
	priv->modifiable_dirs_gconf_mntr_id              = 0;
390
	priv->modifiable_bookmarks_gconf_mntr_id         = 0;
390
	priv->disable_term_gconf_mntr_id                 = 0;
391
	priv->disable_term_gconf_mntr_id                 = 0;
391
	priv->disable_logout_gconf_mntr_id               = 0;
392
	priv->disable_logout_gconf_mntr_id               = 0;
392
	priv->disable_lockscreen_gconf_mntr_id           = 0;
393
	priv->disable_lockscreen_gconf_mntr_id           = 0;
Lines 425-431 Link Here
425
	libslab_gconf_notify_remove (priv->modifiable_system_gconf_mntr_id);
426
	libslab_gconf_notify_remove (priv->modifiable_system_gconf_mntr_id);
426
	libslab_gconf_notify_remove (priv->modifiable_apps_gconf_mntr_id);
427
	libslab_gconf_notify_remove (priv->modifiable_apps_gconf_mntr_id);
427
	libslab_gconf_notify_remove (priv->modifiable_docs_gconf_mntr_id);
428
	libslab_gconf_notify_remove (priv->modifiable_docs_gconf_mntr_id);
428
	libslab_gconf_notify_remove (priv->modifiable_dirs_gconf_mntr_id);
429
	libslab_gconf_notify_remove (priv->modifiable_bookmarks_gconf_mntr_id);
429
	libslab_gconf_notify_remove (priv->disable_term_gconf_mntr_id);
430
	libslab_gconf_notify_remove (priv->disable_term_gconf_mntr_id);
430
	libslab_gconf_notify_remove (priv->disable_logout_gconf_mntr_id);
431
	libslab_gconf_notify_remove (priv->disable_logout_gconf_mntr_id);
431
	libslab_gconf_notify_remove (priv->disable_lockscreen_gconf_mntr_id);
432
	libslab_gconf_notify_remove (priv->disable_lockscreen_gconf_mntr_id);
Lines 607-618 Link Here
607
		priv->main_menu_xml, "slab-page-selector-button-applications");
608
		priv->main_menu_xml, "slab-page-selector-button-applications");
608
	priv->page_selectors [DOCS_PAGE] = glade_xml_get_widget (
609
	priv->page_selectors [DOCS_PAGE] = glade_xml_get_widget (
609
		priv->main_menu_xml, "slab-page-selector-button-documents");
610
		priv->main_menu_xml, "slab-page-selector-button-documents");
610
	priv->page_selectors [DIRS_PAGE] = glade_xml_get_widget (
611
	priv->page_selectors [BOOKMARKS_PAGE] = glade_xml_get_widget (
611
		priv->main_menu_xml, "slab-page-selector-button-places");
612
		priv->main_menu_xml, "slab-page-selector-button-places");
612
613
613
	pages [APPS_PAGE] = glade_xml_get_widget (priv->main_menu_xml, "applications-page");
614
	pages [APPS_PAGE] = glade_xml_get_widget (priv->main_menu_xml, "applications-page");
614
	pages [DOCS_PAGE] = glade_xml_get_widget (priv->main_menu_xml, "documents-page");
615
	pages [DOCS_PAGE] = glade_xml_get_widget (priv->main_menu_xml, "documents-page");
615
	pages [DIRS_PAGE] = glade_xml_get_widget (priv->main_menu_xml, "places-page");
616
	pages [BOOKMARKS_PAGE] = glade_xml_get_widget (priv->main_menu_xml, "places-page");
616
617
617
	for (i = 0; i < 3; ++i) {
618
	for (i = 0; i < 3; ++i) {
618
		gtk_container_child_get (
619
		gtk_container_child_get (
Lines 638-645 Link Here
638
		priv->main_menu_xml, "user-docs-section");
639
		priv->main_menu_xml, "user-docs-section");
639
	priv->table_sections [RCNT_DOCS_TABLE] = glade_xml_get_widget (
640
	priv->table_sections [RCNT_DOCS_TABLE] = glade_xml_get_widget (
640
		priv->main_menu_xml, "recent-docs-section");
641
		priv->main_menu_xml, "recent-docs-section");
641
	priv->table_sections [USER_DIRS_TABLE] = glade_xml_get_widget (
642
	priv->table_sections [USER_BOOKMARKS_TABLE] = glade_xml_get_widget (
642
		priv->main_menu_xml, "user-dirs-section");
643
		priv->main_menu_xml, "user-bookmarks-section");
643
}
644
}
644
645
645
static void
646
static void
Lines 790-796 Link Here
790
}
791
}
791
792
792
static void
793
static void
793
create_user_dirs_section (MainMenuUI *this)
794
create_user_bookmarks_section (MainMenuUI *this)
794
{
795
{
795
	MainMenuUIPrivate *priv = PRIVATE (this);
796
	MainMenuUIPrivate *priv = PRIVATE (this);
796
797
Lines 798-810 Link Here
798
799
799
800
800
	ctnr = GTK_CONTAINER (glade_xml_get_widget (
801
	ctnr = GTK_CONTAINER (glade_xml_get_widget (
801
		priv->main_menu_xml, "user-dirs-table-container"));
802
		priv->main_menu_xml, "user-bookmarks-table-container"));
802
803
803
	priv->file_tables [USER_DIRS_TABLE] = TILE_TABLE (tile_table_new (
804
	priv->file_tables [USER_BOOKMARKS_TABLE] = TILE_TABLE (tile_table_new (
804
		priv->bm_agents [BOOKMARK_STORE_USER_DIRS], -1, 2, FALSE, FALSE,
805
		priv->bm_agents [BOOKMARK_STORE_USER_DIRS], -1, 2, FALSE, FALSE,
805
		item_to_dir_tile, this, NULL, NULL));
806
		item_to_bookmark_tile, this, NULL, NULL));
806
807
807
	gtk_container_add (ctnr, GTK_WIDGET (priv->file_tables [USER_DIRS_TABLE]));
808
	gtk_container_add (ctnr, GTK_WIDGET (priv->file_tables [USER_BOOKMARKS_TABLE]));
808
}
809
}
809
810
810
static void
811
static void
Lines 831-837 Link Here
831
832
832
	priv->more_sections [0] = glade_xml_get_widget (priv->main_menu_xml, "more-apps-section");
833
	priv->more_sections [0] = glade_xml_get_widget (priv->main_menu_xml, "more-apps-section");
833
	priv->more_sections [1] = glade_xml_get_widget (priv->main_menu_xml, "more-docs-section");
834
	priv->more_sections [1] = glade_xml_get_widget (priv->main_menu_xml, "more-docs-section");
834
	priv->more_sections [2] = glade_xml_get_widget (priv->main_menu_xml, "more-dirs-section");
835
	priv->more_sections [2] = glade_xml_get_widget (priv->main_menu_xml, "more-bookmarks-section");
835
}
836
}
836
837
837
static void
838
static void
Lines 913-920 Link Here
913
		MODIFIABLE_APPS_GCONF_KEY, lockdown_notify_cb, this);
914
		MODIFIABLE_APPS_GCONF_KEY, lockdown_notify_cb, this);
914
	priv->modifiable_docs_gconf_mntr_id = libslab_gconf_notify_add (
915
	priv->modifiable_docs_gconf_mntr_id = libslab_gconf_notify_add (
915
		MODIFIABLE_DOCS_GCONF_KEY, lockdown_notify_cb, this);
916
		MODIFIABLE_DOCS_GCONF_KEY, lockdown_notify_cb, this);
916
	priv->modifiable_dirs_gconf_mntr_id = libslab_gconf_notify_add (
917
	priv->modifiable_bookmarks_gconf_mntr_id = libslab_gconf_notify_add (
917
		MODIFIABLE_DIRS_GCONF_KEY, lockdown_notify_cb, this);
918
		MODIFIABLE_BOOKMARKS_GCONF_KEY, lockdown_notify_cb, this);
918
	priv->disable_term_gconf_mntr_id = libslab_gconf_notify_add (
919
	priv->disable_term_gconf_mntr_id = libslab_gconf_notify_add (
919
		DISABLE_TERMINAL_GCONF_KEY, lockdown_notify_cb, this);
920
		DISABLE_TERMINAL_GCONF_KEY, lockdown_notify_cb, this);
920
	priv->disable_logout_gconf_mntr_id = libslab_gconf_notify_add (
921
	priv->disable_logout_gconf_mntr_id = libslab_gconf_notify_add (
Lines 1000-1008 Link Here
1000
}
1001
}
1001
1002
1002
static Tile *
1003
static Tile *
1003
item_to_dir_tile (BookmarkItem *item, gpointer data)
1004
item_to_bookmark_tile (BookmarkItem *item, gpointer data)
1004
{
1005
{
1005
	return TILE (directory_tile_new (item->uri, item->title, item->icon));
1006
	return TILE (bookmark_tile_new (item->uri, item->title, item->icon));
1006
}
1007
}
1007
1008
1008
static Tile *
1009
static Tile *
Lines 1184-1190 Link Here
1184
	}
1185
	}
1185
1186
1186
	g_object_get (
1187
	g_object_get (
1187
		priv->file_tables [USER_DIRS_TABLE],
1188
		priv->file_tables [USER_BOOKMARKS_TABLE],
1188
		"n-rows", & n_rows, "n-columns", & n_cols, NULL);
1189
		"n-rows", & n_rows, "n-columns", & n_cols, NULL);
1189
1190
1190
	if (priv->max_total_items < (n_rows * n_cols))
1191
	if (priv->max_total_items < (n_rows * n_cols))
Lines 1302-1311 Link Here
1302
	else
1303
	else
1303
		gtk_widget_hide (priv->page_selectors [DOCS_PAGE]);
1304
		gtk_widget_hide (priv->page_selectors [DOCS_PAGE]);
1304
1305
1305
	if (GTK_WIDGET_VISIBLE (priv->table_sections [USER_DIRS_TABLE]))
1306
	if (GTK_WIDGET_VISIBLE (priv->table_sections [USER_BOOKMARKS_TABLE]))
1306
		gtk_widget_show (priv->page_selectors [DIRS_PAGE]);
1307
		gtk_widget_show (priv->page_selectors [BOOKMARKS_PAGE]);
1307
	else
1308
	else
1308
		gtk_widget_hide (priv->page_selectors [DIRS_PAGE]);
1309
		gtk_widget_hide (priv->page_selectors [BOOKMARKS_PAGE]);
1309
}
1310
}
1310
1311
1311
static gchar **
1312
static gchar **
Lines 1517-1523 Link Here
1517
	tile_table_reload (priv->file_tables [USER_APPS_TABLE]);
1518
	tile_table_reload (priv->file_tables [USER_APPS_TABLE]);
1518
	tile_table_reload (priv->file_tables [RCNT_APPS_TABLE]);
1519
	tile_table_reload (priv->file_tables [RCNT_APPS_TABLE]);
1519
	tile_table_reload (priv->file_tables [USER_DOCS_TABLE]);
1520
	tile_table_reload (priv->file_tables [USER_DOCS_TABLE]);
1520
	tile_table_reload (priv->file_tables [USER_DIRS_TABLE]);
1521
	tile_table_reload (priv->file_tables [USER_BOOKMARKS_TABLE]);
1521
1522
1522
	update_limits (this);
1523
	update_limits (this);
1523
}
1524
}
(-)main-menu/src/slab-window.glade (-3 / +3 lines)
Lines 721-727 Link Here
721
			  <property name="spacing">12</property>
721
			  <property name="spacing">12</property>
722
722
723
			  <child>
723
			  <child>
724
			    <widget class="GtkVBox" id="user-dirs-section">
724
			    <widget class="GtkVBox" id="user-bookmarks-section">
725
			      <property name="visible">True</property>
725
			      <property name="visible">True</property>
726
			      <property name="homogeneous">False</property>
726
			      <property name="homogeneous">False</property>
727
			      <property name="spacing">12</property>
727
			      <property name="spacing">12</property>
Lines 752-758 Link Here
752
			      </child>
752
			      </child>
753
753
754
			      <child>
754
			      <child>
755
				<widget class="GtkAlignment" id="user-dirs-table-container">
755
				<widget class="GtkAlignment" id="user-bookmarks-table-container">
756
				  <property name="visible">True</property>
756
				  <property name="visible">True</property>
757
				  <property name="xalign">0.5</property>
757
				  <property name="xalign">0.5</property>
758
				  <property name="yalign">0.5</property>
758
				  <property name="yalign">0.5</property>
Lines 782-788 Link Here
782
			  </child>
782
			  </child>
783
783
784
			  <child>
784
			  <child>
785
			    <widget class="GtkAlignment" id="more-dirs-section">
785
			    <widget class="GtkAlignment" id="more-bookmarks-section">
786
			      <property name="visible">True</property>
786
			      <property name="visible">True</property>
787
			      <property name="xalign">1</property>
787
			      <property name="xalign">1</property>
788
			      <property name="yalign">0.5</property>
788
			      <property name="yalign">0.5</property>
(-)main-menu/etc/slab.schemas.in.in (-4 / +4 lines)
Lines 254-267 Link Here
254
		</schema>
254
		</schema>
255
255
256
		<schema>
256
		<schema>
257
			<key>/schemas/desktop/gnome/applications/main-menu/lock-down/user_modifiable_dirs</key>
257
			<key>/schemas/desktop/gnome/applications/main-menu/lock-down/user_modifiable_bookmarks</key>
258
			<applyto>/desktop/gnome/applications/main-menu/lock-down/user_modifiable_dirs</applyto>
258
			<applyto>/desktop/gnome/applications/main-menu/lock-down/user_modifiable_bookmarks</applyto>
259
			<owner>gnome-main-menu</owner>
259
			<owner>gnome-main-menu</owner>
260
			<type>bool</type>
260
			<type>bool</type>
261
			<default>true</default>
261
			<default>true</default>
262
			<locale name="C">
262
			<locale name="C">
263
				<short>lock-down status for the user-specified dirs section</short>
263
				<short>lock-down status for the user-specified bookmarks section</short>
264
				<long>set to true if the user is allowed to modify the list of user-specified or "Favorite" directories or "Places".</long>
264
				<long>set to true if the user is allowed to modify the list of user-specified or "Favorite" bookmarks.</long>
265
			</locale>
265
			</locale>
266
		</schema>
266
		</schema>
267
267
(-)ChangeLog (+14 lines)
Lines 1-3 Link Here
1
2007-12-19  Lukas Lipka  <lukaslipka@gmail.com>
2
3
	* main-menu/src/main-menu-ui.c
4
	* main-menu/src/slab-window.glade
5
	* main-menu/etc/slab.schemas.in.in
6
	* libslab/bookmark-tile.c
7
	* libslab/bookmark-tile.h
8
	* libslab/bookmark-agent.c:
9
	Main-Menu "Places" Items have no "Remove from Favorites" - BNC #309058
10
	Create a bookmark-tile which removes the Move to Trash, Delete, Rename,
11
	Send to actions from unlike directory tiles since they don't really make
12
	sense for bookmarks. Do the correct thing upon removal when a bookmark
13
	comes from ~/.gtk-bookmarks.
14
1
2007-11-28  Scott Reeves  <sreeves@novell.com>
15
2007-11-28  Scott Reeves  <sreeves@novell.com>
2
	* libslab/app-shell-startup.c
16
	* libslab/app-shell-startup.c
3
	* libslab/app-shell.c:
17
	* libslab/app-shell.c:
(-)libslab/bookmark-tile.c (+292 lines)
Line 0 Link Here
1
/*
2
 * This file is part of libtile.
3
 *
4
 * Copyright (c) 2006 Novell, Inc.
5
 *
6
 * Libtile is free software; you can redistribute it and/or modify it under the
7
 * terms of the GNU Lesser General Public License as published by the Free
8
 * Software Foundation; either version 2 of the License, or (at your option)
9
 * any later version.
10
 *
11
 * Libtile is distributed in the hope that it will be useful, but WITHOUT ANY
12
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
 * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
14
 * more details.
15
 *
16
 * You should have received a copy of the GNU Lesser General Public License
17
 * along with libslab; if not, write to the Free Software Foundation, Inc., 51
18
 * Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19
 */
20
21
#include "bookmark-tile.h"
22
23
#include <glib/gi18n.h>
24
#include <string.h>
25
#include <libgnomeui/gnome-icon-lookup.h>
26
#include <libgnomevfs/gnome-vfs.h>
27
#include <unistd.h>
28
29
#include "slab-gnome-util.h"
30
#include "gnome-utils.h"
31
#include "libslab-utils.h"
32
#include "bookmark-agent.h"
33
34
G_DEFINE_TYPE (BookmarkTile, bookmark_tile, NAMEPLATE_TILE_TYPE)
35
36
static void bookmark_tile_finalize (GObject *);
37
static void bookmark_tile_style_set (GtkWidget *, GtkStyle *);
38
39
static void bookmark_tile_private_setup (BookmarkTile *);
40
static void load_image (BookmarkTile *);
41
42
static GtkWidget *create_header (const gchar *);
43
44
static void header_size_allocate_cb (GtkWidget *, GtkAllocation *, gpointer);
45
46
static void open_trigger (Tile *, TileEvent *, TileAction *);
47
static void remove_favorite_trigger (Tile *tile, TileEvent *event, TileAction *action);
48
49
typedef struct
50
{
51
	gchar *basename;
52
	
53
	GtkBin *header_bin;
54
55
	gchar *icon_name;
56
	
57
	gboolean image_is_broken;
58
59
	BookmarkAgent *agent;
60
} BookmarkTilePrivate;
61
62
#define BOOKMARK_TILE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BOOKMARK_TILE_TYPE, BookmarkTilePrivate))
63
64
static void bookmark_tile_class_init (BookmarkTileClass *this_class)
65
{
66
	GObjectClass *g_obj_class = G_OBJECT_CLASS (this_class);
67
	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (this_class);
68
69
	g_obj_class->finalize = bookmark_tile_finalize;
70
71
	widget_class->style_set = bookmark_tile_style_set;
72
73
	g_type_class_add_private (this_class, sizeof (BookmarkTilePrivate));
74
}
75
76
GtkWidget *
77
bookmark_tile_new (const gchar *in_uri, const gchar *title, const gchar *icon_name)
78
{
79
	BookmarkTile *this;
80
	BookmarkTilePrivate *priv;
81
82
	gchar *uri;
83
	GtkWidget *image;
84
	GtkWidget *header;
85
	GtkMenu *context_menu;
86
87
	GtkContainer *menu_ctnr;
88
	GtkWidget *menu_item;
89
90
	TileAction *action;
91
92
	gchar *basename;
93
94
	gchar *markup;
95
96
	AtkObject *accessible;
97
	
98
	gchar *filename;
99
	gchar *tooltip_text;
100
101
  
102
	uri = g_strdup (in_uri);
103
104
	image = gtk_image_new ();
105
106
	if (! title) {
107
		markup = g_path_get_basename (uri);
108
		basename = gnome_vfs_unescape_string (markup, NULL);
109
		g_free (markup);
110
	}
111
	else
112
		basename = g_strdup (title);
113
114
	header = create_header (basename);
115
116
	filename = g_filename_from_uri (uri, NULL, NULL);
117
118
  	if (filename)
119
		tooltip_text = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL);
120
	else
121
		tooltip_text = NULL;
122
123
	g_free (filename);
124
	
125
	context_menu = GTK_MENU (gtk_menu_new ());
126
127
	this = g_object_new (
128
		BOOKMARK_TILE_TYPE,
129
		"tile-uri",          uri,
130
		"nameplate-image",   image,
131
		"nameplate-header",  header,
132
		"nameplate-tooltip", tooltip_text,
133
		"context-menu",      context_menu,
134
		NULL);
135
136
	g_free (uri);
137
	if (tooltip_text)
138
		g_free (tooltip_text);
139
140
	priv = BOOKMARK_TILE_GET_PRIVATE (this);
141
	priv->basename    = g_strdup (basename);
142
	priv->header_bin  = GTK_BIN (header);
143
	priv->icon_name   = g_strdup (icon_name);
144
145
	bookmark_tile_private_setup (this);
146
147
	TILE (this)->actions = g_new0 (TileAction *, 2);
148
	TILE (this)->n_actions = 2;
149
150
	menu_ctnr = GTK_CONTAINER (TILE (this)->context_menu);
151
152
	/* make open with default action */
153
154
	markup = g_markup_printf_escaped (_("<b>Open</b>"));
155
	action = tile_action_new (TILE (this), open_trigger, markup, TILE_ACTION_OPENS_NEW_WINDOW);
156
	g_free (markup);
157
158
	TILE (this)->default_action = action;
159
160
	menu_item = GTK_WIDGET (GTK_WIDGET (tile_action_get_menu_item (action)));
161
162
	TILE (this)->actions [BOOKMARK_TILE_ACTION_OPEN] = action;
163
164
	gtk_container_add (menu_ctnr, menu_item);
165
166
	/* insert separator */
167
168
	menu_item = gtk_separator_menu_item_new ();
169
	gtk_container_add (menu_ctnr, menu_item);
170
171
	/* make remove from favorites action */
172
173
	action = tile_action_new (TILE (this), remove_favorite_trigger, _("Remove from Favorites"), 0);
174
	TILE (this)->actions[BOOKMARK_TILE_ACTION_REMOVE_FAVORITE] = action;
175
176
	menu_item = GTK_WIDGET (tile_action_get_menu_item (action));
177
	gtk_container_add (menu_ctnr, menu_item);
178
179
180
	gtk_widget_show_all (GTK_WIDGET (TILE (this)->context_menu));
181
182
	load_image (this);
183
184
	accessible = gtk_widget_get_accessible (GTK_WIDGET (this));
185
	if (basename)
186
	  atk_object_set_name (accessible, basename);
187
188
	g_free (basename);
189
190
	return GTK_WIDGET (this);
191
}
192
193
static void
194
bookmark_tile_private_setup (BookmarkTile *tile)
195
{
196
	BookmarkTilePrivate *priv = BOOKMARK_TILE_GET_PRIVATE (tile);
197
198
199
	priv->agent = bookmark_agent_get_instance (BOOKMARK_STORE_USER_DIRS);
200
}
201
202
static void
203
bookmark_tile_init (BookmarkTile *tile)
204
{
205
	BookmarkTilePrivate *priv = BOOKMARK_TILE_GET_PRIVATE (tile);
206
207
208
	priv->basename = NULL;
209
	priv->header_bin = NULL;
210
	priv->icon_name = NULL;
211
	priv->image_is_broken = TRUE;
212
}
213
214
static void
215
bookmark_tile_finalize (GObject *g_object)
216
{
217
	BookmarkTilePrivate *priv = BOOKMARK_TILE_GET_PRIVATE (g_object);
218
219
220
	g_free (priv->basename);
221
	g_free (priv->icon_name);
222
223
	(* G_OBJECT_CLASS (bookmark_tile_parent_class)->finalize) (g_object);
224
}
225
226
static void
227
bookmark_tile_style_set (GtkWidget *widget, GtkStyle *prev_style)
228
{
229
	load_image (BOOKMARK_TILE (widget));
230
}
231
232
static void
233
load_image (BookmarkTile *tile)
234
{
235
	BookmarkTilePrivate *priv = BOOKMARK_TILE_GET_PRIVATE (tile);
236
	gchar *icon_name;
237
238
	if (priv->icon_name)
239
		icon_name = priv->icon_name;
240
	else
241
		icon_name = "gnome-fs-directory";
242
243
	priv->image_is_broken = slab_load_image (
244
		GTK_IMAGE (NAMEPLATE_TILE (tile)->image), GTK_ICON_SIZE_DND, icon_name);
245
}
246
247
static GtkWidget *
248
create_header (const gchar *name)
249
{
250
	GtkWidget *header_bin;
251
	GtkWidget *header;
252
253
	header = gtk_label_new (name);
254
	gtk_label_set_ellipsize (GTK_LABEL (header), PANGO_ELLIPSIZE_END);
255
	gtk_misc_set_alignment (GTK_MISC (header), 0.0, 0.5);
256
257
	header_bin = gtk_alignment_new (0.0, 0.5, 1.0, 0.0);
258
	gtk_container_add (GTK_CONTAINER (header_bin), header);
259
260
	g_signal_connect (G_OBJECT (header), "size-allocate", G_CALLBACK (header_size_allocate_cb),
261
		NULL);
262
263
	return header_bin;
264
}
265
266
static void
267
header_size_allocate_cb (GtkWidget *widget, GtkAllocation *alloc, gpointer user_data)
268
{
269
	gtk_widget_set_size_request (widget, alloc->width, -1);
270
}
271
272
static void
273
open_trigger (Tile *tile, TileEvent *event, TileAction *action)
274
{
275
	gchar *cmd;
276
277
	cmd = string_replace_once (
278
		get_slab_gconf_string (SLAB_FILE_MANAGER_OPEN_CMD), "FILE_URI", tile->uri);
279
280
	spawn_process (cmd);
281
282
	g_free (cmd);
283
}
284
285
static void
286
remove_favorite_trigger (Tile *tile, TileEvent *event, TileAction *action)
287
{
288
	BookmarkTilePrivate *priv = BOOKMARK_TILE_GET_PRIVATE (tile);
289
  
290
	bookmark_agent_remove_item (priv->agent, TILE (tile)->uri);
291
}
292
(-)libslab/bookmark-tile.h (+54 lines)
Line 0 Link Here
1
/*
2
 * This file is part of libtile.
3
 *
4
 * Copyright (c) 2006 Novell, Inc.
5
 *
6
 * Libtile is free software; you can redistribute it and/or modify it under the
7
 * terms of the GNU Lesser General Public License as published by the Free
8
 * Software Foundation; either version 2 of the License, or (at your option)
9
 * any later version.
10
 *
11
 * Libtile is distributed in the hope that it will be useful, but WITHOUT ANY
12
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
 * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
14
 * more details.
15
 *
16
 * You should have received a copy of the GNU Lesser General Public License
17
 * along with libslab; if not, write to the Free Software Foundation, Inc., 51
18
 * Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19
 */
20
21
#ifndef __BOOKMARK_TILE_H__
22
#define __BOOKMARK_TILE_H__
23
24
#include <time.h>
25
26
#include "nameplate-tile.h"
27
28
G_BEGIN_DECLS
29
30
#define BOOKMARK_TILE_TYPE         (bookmark_tile_get_type ())
31
#define BOOKMARK_TILE(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), BOOKMARK_TILE_TYPE, BookmarkTile))
32
#define BOOKMARK_TILE_CLASS(c)     (G_TYPE_CHECK_CLASS_CAST ((c), BOOKMARK_TILE_TYPE, BookmarkTileClass))
33
#define IS_BOOKMARK_TILE(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), BOOKMARK_TILE_TYPE))
34
#define IS_BOOKMARK_TILE_CLASS(c)  (G_TYPE_CHECK_CLASS_TYPE ((c), BOOKMARK_TILE_TYPE))
35
#define BOOKMARK_TILE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), BOOKMARK_TILE_TYPE, BookmarkTileClass))
36
37
typedef struct {
38
	NameplateTile nameplate_tile;
39
} BookmarkTile;
40
41
typedef struct {
42
	NameplateTileClass nameplate_tile_class;
43
} BookmarkTileClass;
44
45
#define BOOKMARK_TILE_ACTION_OPEN            0
46
#define BOOKMARK_TILE_ACTION_REMOVE_FAVORITE 1
47
48
GType bookmark_tile_get_type (void);
49
50
GtkWidget *bookmark_tile_new (const gchar *uri, const gchar *title, const gchar *icon_name);
51
52
G_END_DECLS
53
54
#endif
(-)libslab/bookmark-agent.c (+63 lines)
Lines 121-126 Link Here
121
121
122
static void load_xbel_store          (BookmarkAgent *);
122
static void load_xbel_store          (BookmarkAgent *);
123
static void load_places_store        (BookmarkAgent *);
123
static void load_places_store        (BookmarkAgent *);
124
static void save_places_store        (BookmarkAgent *);
124
static void load_recent_store        (BookmarkAgent *);
125
static void load_recent_store        (BookmarkAgent *);
125
static void update_user_spec_path    (BookmarkAgent *);
126
static void update_user_spec_path    (BookmarkAgent *);
126
static void update_recent_store_path (BookmarkAgent *);
127
static void update_recent_store_path (BookmarkAgent *);
Lines 446-451 Link Here
446
			priv->reorderable     = FALSE;
447
			priv->reorderable     = FALSE;
447
448
448
			priv->load_store = load_places_store;
449
			priv->load_store = load_places_store;
450
			priv->save_store = save_places_store;
449
451
450
			priv->gtk_store_path = g_build_filename (g_get_home_dir (), GTK_BOOKMARKS_FILE, NULL);
452
			priv->gtk_store_path = g_build_filename (g_get_home_dir (), GTK_BOOKMARKS_FILE, NULL);
451
			gnome_vfs_monitor_add (
453
			gnome_vfs_monitor_add (
Lines 822-827 Link Here
822
}
824
}
823
825
824
static void
826
static void
827
save_places_store (BookmarkAgent *this)
828
{
829
	BookmarkAgentPrivate *priv = PRIVATE (this);
830
	
831
	GError *error = NULL;
832
	
833
	gchar *buffer = NULL;
834
	gchar **uris;
835
	gint i;
836
	gsize count;
837
	
838
	
839
	if (! g_bookmark_file_to_file (priv->store, priv->store_path, & error))
840
		libslab_handle_g_error (
841
			& error, "%s: couldn't save bookmark file [%s]\n", G_STRFUNC, priv->store_path);
842
	
843
	uris = g_bookmark_file_get_uris (priv->store, & count);
844
	
845
	for (i = 0; uris && uris [i]; i++) {
846
		gchar **groups;
847
		gint j;
848
		
849
		groups = g_bookmark_file_get_groups (priv->store, uris [i], & count, & error);
850
		
851
		for (j = 0; groups && groups [j]; j++) {
852
			gchar *line;
853
			gchar *label;
854
855
			if (g_ascii_strcasecmp (groups [j], "gtk-bookmarks"))
856
				continue;
857
			
858
			label = g_bookmark_file_get_title (priv->store, uris [i], NULL);
859
860
			if (label != NULL) {
861
				line = g_strconcat (uris [i], " ", label, "\n", NULL);
862
				g_free (label);
863
			} else {
864
				line = g_strconcat (uris [i], "\n", NULL);
865
			}
866
			
867
			if (buffer != NULL) {
868
				gchar *temp = buffer;
869
				buffer = g_strconcat (buffer, line, NULL);
870
				g_free (temp);
871
				g_free (line);
872
			} else {
873
				buffer = line;
874
			}
875
		}
876
		
877
		g_strfreev (groups);
878
	}
879
	
880
	g_strfreev (uris);
881
882
	if (! g_file_set_contents (priv->gtk_store_path, buffer, -1, & error))
883
		libslab_handle_g_error (
884
			& error, "%s: couldn't save gtk-bookmark file [%s]\n", G_STRFUNC, priv->store_path);
885
}
886
887
static void
825
load_recent_store (BookmarkAgent *this)
888
load_recent_store (BookmarkAgent *this)
826
{
889
{
827
	BookmarkAgentPrivate *priv = PRIVATE (this);
890
	BookmarkAgentPrivate *priv = PRIVATE (this);
(-)libslab/Makefile.am (+2 lines)
Lines 8-13 Link Here
8
	app-shell.h				\
8
	app-shell.h				\
9
	app-shell-startup.h			\
9
	app-shell-startup.h			\
10
	application-tile.h			\
10
	application-tile.h			\
11
	bookmark-tile.h				\
11
	directory-tile.h			\
12
	directory-tile.h			\
12
	document-tile.h				\
13
	document-tile.h				\
13
	gnome-utils.h				\
14
	gnome-utils.h				\
Lines 39-44 Link Here
39
	bookmark-agent.h			\
40
	bookmark-agent.h			\
40
	bookmark-agent-libslab.h		\
41
	bookmark-agent-libslab.h		\
41
	bookmark-agent.c			\
42
	bookmark-agent.c			\
43
	bookmark-tile.c				\
42
	directory-tile.c			\
44
	directory-tile.c			\
43
	document-tile.c				\
45
	document-tile.c				\
44
	double-click-detector.c			\
46
	double-click-detector.c			\

Return to bug 309058