Use pack_toolbar to pack edit toolbar in folder window
[modest] / src / hildon2 / modest-folder-window.c
1 /* Copyright (c) 2008, Nokia Corporation
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  *   notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  *   notice, this list of conditions and the following disclaimer in the
12  *   documentation and/or other materials provided with the distribution.
13  * * Neither the name of the Nokia Corporation nor the names of its
14  *   contributors may be used to endorse or promote products derived from
15  *   this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
18  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
21  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29
30 #include <modest-folder-window.h>
31 #include <modest-osso-state-saving.h>
32 #include <libosso.h>
33 #include <hildon/hildon-pannable-area.h>
34 #include <modest-window-mgr.h>
35 #include <modest-signal-mgr.h>
36 #include <modest-runtime.h>
37 #include <modest-platform.h>
38 #include <modest-maemo-utils.h>
39 #include <modest-icon-names.h>
40 #include <modest-ui-constants.h>
41 #include <modest-account-mgr.h>
42 #include <modest-account-mgr-helpers.h>
43 #include <modest-defs.h>
44 #include <modest-ui-actions.h>
45 #include <modest-window.h>
46 #include <hildon/hildon-program.h>
47 #include <hildon/hildon-banner.h>
48 #include <hildon/hildon-edit-toolbar.h>
49 #include <tny-account-store-view.h>
50 #include <modest-header-window.h>
51 #include <modest-ui-dimming-rules.h>
52 #include <modest-ui-dimming-manager.h>
53 #include <modest-window-priv.h>
54
55 typedef enum {
56         EDIT_MODE_COMMAND_NONE = 0,
57         EDIT_MODE_COMMAND_MOVE = 1,
58         EDIT_MODE_COMMAND_DELETE = 2,
59         EDIT_MODE_COMMAND_RENAME = 3,
60 } EditModeCommand;
61
62 /* 'private'/'protected' functions */
63 static void modest_folder_window_class_init  (ModestFolderWindowClass *klass);
64 static void modest_folder_window_init        (ModestFolderWindow *obj);
65 static void modest_folder_window_finalize    (GObject *obj);
66
67 static void connect_signals (ModestFolderWindow *self);
68 static void modest_folder_window_disconnect_signals (ModestWindow *self);
69
70 static void on_folder_activated (ModestFolderView *folder_view,
71                                  TnyFolder *folder,
72                                  gpointer userdata);
73 static void setup_menu (ModestFolderWindow *self);
74
75 static void set_edit_mode (ModestFolderWindow *self,
76                            EditModeCommand command);
77 static void edit_toolbar_button_clicked (HildonEditToolbar *toolbar,
78                                          ModestFolderWindow *self);
79 static void edit_toolbar_arrow_clicked (HildonEditToolbar *toolbar,
80                                         ModestFolderWindow *self);
81 static void set_delete_edit_mode (GtkButton *button,
82                                   ModestFolderWindow *self);
83 static void set_moveto_edit_mode (GtkButton *button,
84                                   ModestFolderWindow *self);
85 static void set_rename_edit_mode (GtkButton *button,
86                                   ModestFolderWindow *self);
87 static void modest_folder_window_pack_toolbar (ModestHildon2Window *self,
88                                                GtkPackType pack_type,
89                                                GtkWidget *toolbar);
90
91 typedef struct _ModestFolderWindowPrivate ModestFolderWindowPrivate;
92 struct _ModestFolderWindowPrivate {
93
94         GtkWidget *folder_view;
95         GtkWidget *edit_toolbar;
96         GtkWidget *top_vbox;
97
98         gboolean edit_mode;
99         EditModeCommand edit_command;
100
101         /* signals */
102         GSList *sighandlers;
103
104         /* Display state */
105         osso_display_state_t display_state;
106 };
107 #define MODEST_FOLDER_WINDOW_GET_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE((o), \
108                                                                           MODEST_TYPE_FOLDER_WINDOW, \
109                                                                           ModestFolderWindowPrivate))
110
111 /* globals */
112 static GtkWindowClass *parent_class = NULL;
113
114 /************************************************************************/
115
116 GType
117 modest_folder_window_get_type (void)
118 {
119         static GType my_type = 0;
120         if (!my_type) {
121                 static const GTypeInfo my_info = {
122                         sizeof(ModestFolderWindowClass),
123                         NULL,           /* base init */
124                         NULL,           /* base finalize */
125                         (GClassInitFunc) modest_folder_window_class_init,
126                         NULL,           /* class finalize */
127                         NULL,           /* class data */
128                         sizeof(ModestFolderWindow),
129                         1,              /* n_preallocs */
130                         (GInstanceInitFunc) modest_folder_window_init,
131                         NULL
132                 };
133                 my_type = g_type_register_static (MODEST_TYPE_HILDON2_WINDOW,
134                                                   "ModestFolderWindow",
135                                                   &my_info, 0);
136         }
137         return my_type;
138 }
139
140 static void
141 modest_folder_window_class_init (ModestFolderWindowClass *klass)
142 {
143         GObjectClass *gobject_class;
144         gobject_class = (GObjectClass*) klass;
145         ModestWindowClass *modest_window_class = (ModestWindowClass *) klass;
146         ModestHildon2WindowClass *modest_hildon2_window_class = (ModestHildon2WindowClass *) klass;
147
148         parent_class            = g_type_class_peek_parent (klass);
149         gobject_class->finalize = modest_folder_window_finalize;
150
151         g_type_class_add_private (gobject_class, sizeof(ModestFolderWindowPrivate));
152         
153         modest_window_class->disconnect_signals_func = modest_folder_window_disconnect_signals;
154         modest_hildon2_window_class->pack_toolbar_func = modest_folder_window_pack_toolbar;
155 }
156
157 static void
158 modest_folder_window_init (ModestFolderWindow *obj)
159 {
160         ModestFolderWindowPrivate *priv;
161
162         priv = MODEST_FOLDER_WINDOW_GET_PRIVATE(obj);
163
164         priv->sighandlers = NULL;
165         priv->display_state = OSSO_DISPLAY_ON;
166         
167         priv->folder_view = NULL;
168
169         priv->top_vbox = NULL;
170         priv->edit_mode = FALSE;
171         priv->edit_command = EDIT_MODE_COMMAND_NONE;
172         priv->edit_toolbar = NULL;
173         
174         modest_window_mgr_register_help_id (modest_runtime_get_window_mgr(),
175                                             GTK_WINDOW(obj),
176                                             "applications_email_folderview");
177 }
178
179 static void
180 modest_folder_window_finalize (GObject *obj)
181 {
182         ModestFolderWindowPrivate *priv;
183
184         priv = MODEST_FOLDER_WINDOW_GET_PRIVATE(obj);
185
186         /* Sanity check: shouldn't be needed, the window mgr should
187            call this function before */
188         modest_folder_window_disconnect_signals (MODEST_WINDOW (obj));  
189
190         G_OBJECT_CLASS(parent_class)->finalize (obj);
191 }
192
193 static void
194 modest_folder_window_disconnect_signals (ModestWindow *self)
195 {       
196         ModestFolderWindowPrivate *priv;        
197         priv = MODEST_FOLDER_WINDOW_GET_PRIVATE(self);
198
199         modest_signal_mgr_disconnect_all_and_destroy (priv->sighandlers);
200         priv->sighandlers = NULL;       
201 }
202
203 static void
204 connect_signals (ModestFolderWindow *self)
205 {       
206         ModestFolderWindowPrivate *priv;
207         
208         priv = MODEST_FOLDER_WINDOW_GET_PRIVATE(self);
209
210         /* folder view */
211         priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers, 
212                                                        G_OBJECT (priv->folder_view), "folder-activated", 
213                                                        G_CALLBACK (on_folder_activated), self);
214
215         /* TODO: connect folder view activate */
216         
217         /* window */
218
219         /* we don't register this in sighandlers, as it should be run after disconnecting all signals,
220          * in destroy stage */
221
222         
223 }
224
225 static void 
226 osso_display_event_cb (osso_display_state_t state, 
227                        gpointer data)
228 {
229         ModestFolderWindowPrivate *priv = MODEST_FOLDER_WINDOW_GET_PRIVATE (data);
230
231         priv->display_state = state;
232
233         /* Stop blinking if the screen becomes on */
234         if (priv->display_state == OSSO_DISPLAY_ON)
235                 modest_platform_remove_new_mail_notifications (TRUE);
236 }
237
238 ModestWindow *
239 modest_folder_window_new (TnyFolderStoreQuery *query)
240 {
241         ModestFolderWindow *self = NULL;        
242         ModestFolderWindowPrivate *priv = NULL;
243         HildonProgram *app;
244         GdkPixbuf *window_icon;
245         GtkWidget *pannable;
246         
247         self  = MODEST_FOLDER_WINDOW(g_object_new(MODEST_TYPE_FOLDER_WINDOW, NULL));
248         priv = MODEST_FOLDER_WINDOW_GET_PRIVATE(self);
249
250         pannable = hildon_pannable_area_new ();
251         priv->folder_view  = modest_platform_create_folder_view (query);
252         modest_folder_view_set_cell_style (MODEST_FOLDER_VIEW (priv->folder_view),
253                                            MODEST_FOLDER_VIEW_CELL_STYLE_COMPACT);
254
255         setup_menu (self);
256
257         /* Set account store */
258         tny_account_store_view_set_account_store (TNY_ACCOUNT_STORE_VIEW (priv->folder_view),
259                                                   TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()));
260
261         priv->top_vbox = gtk_vbox_new (0, FALSE);
262
263         gtk_container_add (GTK_CONTAINER (pannable), priv->folder_view);
264         gtk_box_pack_end (GTK_BOX (priv->top_vbox), pannable, TRUE, TRUE, 0);
265         gtk_container_add (GTK_CONTAINER (self), priv->top_vbox);
266
267         gtk_widget_show (priv->folder_view);
268         gtk_widget_show (pannable);
269         gtk_widget_show (priv->top_vbox);
270
271         connect_signals (MODEST_FOLDER_WINDOW (self));
272
273         /* Load previous osso state, for instance if we are being restored from 
274          * hibernation:  */
275         modest_osso_load_state ();
276
277         /* Get device name */
278         modest_maemo_utils_get_device_name ();
279
280         app = hildon_program_get_instance ();
281         hildon_program_add_window (app, HILDON_WINDOW (self));
282         
283         /* Set window icon */
284         window_icon = modest_platform_get_icon (MODEST_APP_ICON, MODEST_ICON_SIZE_BIG);
285         if (window_icon) {
286                 gtk_window_set_icon (GTK_WINDOW (self), window_icon);
287                 g_object_unref (window_icon);
288         }
289
290         /* Listen for changes in the screen, we don't want to show a
291            led pattern when the display is on for example */
292         osso_hw_set_display_event_cb (modest_maemo_utils_get_osso_context (),
293                                       osso_display_event_cb,
294                                       self); 
295
296         /* Dont't restore settings here, 
297          * because it requires a gtk_widget_show(), 
298          * and we don't want to do that until later,
299          * so that the UI is not visible for non-menu D-Bus activation.
300          */
301
302         return MODEST_WINDOW(self);
303 }
304
305 gboolean
306 modest_folder_window_screen_is_on (ModestFolderWindow *self)
307 {
308         ModestFolderWindowPrivate *priv = NULL;
309
310         g_return_val_if_fail (MODEST_IS_FOLDER_WINDOW(self), FALSE);
311
312         priv = MODEST_FOLDER_WINDOW_GET_PRIVATE (self);
313         
314         return (priv->display_state == OSSO_DISPLAY_ON) ? TRUE : FALSE;
315 }
316
317 ModestFolderView *
318 modest_folder_window_get_folder_view (ModestFolderWindow *self)
319 {
320         ModestFolderWindowPrivate *priv = NULL;
321
322         g_return_val_if_fail (MODEST_IS_FOLDER_WINDOW(self), FALSE);
323
324         priv = MODEST_FOLDER_WINDOW_GET_PRIVATE (self);
325         
326         return MODEST_FOLDER_VIEW (priv->folder_view);
327 }
328
329 void
330 modest_folder_window_set_account (ModestFolderWindow *self,
331                                   const gchar *account_name)
332 {
333         ModestFolderWindowPrivate *priv = NULL;
334         ModestAccountMgr *mgr;
335         ModestAccountSettings *settings = NULL;
336         ModestServerAccountSettings *store_settings = NULL;
337
338         g_return_if_fail (MODEST_IS_FOLDER_WINDOW(self));
339
340         priv = MODEST_FOLDER_WINDOW_GET_PRIVATE (self);
341         
342         /* Get account data */
343         mgr = modest_runtime_get_account_mgr ();
344
345         settings = modest_account_mgr_load_account_settings (mgr, account_name);
346         if (!settings)
347                 goto free_refs;
348
349         store_settings = modest_account_settings_get_store_settings (settings);
350         if (!store_settings)
351                 goto free_refs;
352
353         modest_folder_view_set_account_id_of_visible_server_account 
354                 (MODEST_FOLDER_VIEW (priv->folder_view),
355                  modest_server_account_settings_get_account_name (store_settings));
356
357         modest_window_set_active_account (MODEST_WINDOW (self), account_name);
358         gtk_window_set_title (GTK_WINDOW (self), 
359                               modest_account_settings_get_display_name (settings));
360
361 free_refs:
362         if (store_settings) 
363                 g_object_unref (store_settings);
364         if (settings)
365                 g_object_unref (settings);
366
367 }
368
369 static void setup_menu (ModestFolderWindow *self)
370 {
371         g_return_if_fail (MODEST_IS_FOLDER_WINDOW(self));
372
373         /* folders actions */
374         modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("TODO: new folder"),
375                                            APP_MENU_CALLBACK (modest_ui_actions_on_new_folder),
376                                            NULL);
377         modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_user_renamefolder"),
378                                            APP_MENU_CALLBACK (set_rename_edit_mode),
379                                            NULL);
380         modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("TODO: move folder"),
381                                            APP_MENU_CALLBACK (set_moveto_edit_mode),
382                                            NULL);
383         modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("TODO: delete folder"),
384                                            APP_MENU_CALLBACK (set_delete_edit_mode),
385                                            NULL);
386
387         /* new message */
388         modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_viewer_newemail"),
389                                            APP_MENU_CALLBACK (modest_ui_actions_on_new_msg),
390                                            NULL);
391
392         /* send receive actions should be only one visible always */
393         modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_sendandreceive"),
394                                            APP_MENU_CALLBACK (modest_ui_actions_on_send_receive),
395                                            MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_send_receive_all));
396         modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_outbox_cancelsend"),
397                                            APP_MENU_CALLBACK (modest_ui_actions_cancel_send),
398                                            MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_cancel_sending_all));
399
400         /* Settings menu buttons */
401         modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("TODO: new account"),
402                                            APP_MENU_CALLBACK (modest_ui_actions_on_new_account),
403                                            NULL);
404         modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("TODO: edit accounts"),
405                                            APP_MENU_CALLBACK (modest_ui_actions_on_accounts),
406                                            NULL);
407         modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_options"),
408                                            APP_MENU_CALLBACK (modest_ui_actions_on_settings),
409                                            NULL);
410         modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_globalsmtpservers"),
411                                            APP_MENU_CALLBACK (modest_ui_actions_on_smtp_servers),
412                                            MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_tools_smtp_servers));
413         
414 }
415
416 static void
417 on_folder_activated (ModestFolderView *folder_view,
418                      TnyFolder *folder,
419                      gpointer userdata)
420 {
421         ModestFolderWindowPrivate *priv = NULL;
422         ModestWindow *headerwin;
423         ModestFolderWindow *self = (ModestFolderWindow *) userdata;
424
425         g_return_if_fail (MODEST_IS_FOLDER_WINDOW(self));
426
427         priv = MODEST_FOLDER_WINDOW_GET_PRIVATE (self);
428
429         if (!folder)
430                 return;
431
432         if (!TNY_IS_FOLDER (folder))
433                 return;
434
435         headerwin = modest_header_window_new (folder);
436         modest_window_mgr_register_window (modest_runtime_get_window_mgr (), 
437                                            MODEST_WINDOW (headerwin),
438                                            MODEST_WINDOW (self));
439
440         modest_window_set_active_account (MODEST_WINDOW (headerwin), 
441                                           modest_window_get_active_account (MODEST_WINDOW (self)));
442         gtk_widget_show (GTK_WIDGET (headerwin));
443 }
444
445 static void
446 set_edit_mode (ModestFolderWindow *self,
447                EditModeCommand command)
448 {
449         ModestFolderWindowPrivate *priv;
450
451         priv = MODEST_FOLDER_WINDOW_GET_PRIVATE (self);
452         if (priv->edit_toolbar) {
453                 gtk_widget_destroy (priv->edit_toolbar);
454                 priv->edit_toolbar = NULL;
455         }
456
457         if (command == EDIT_MODE_COMMAND_NONE) {
458                 if (priv->edit_mode) {
459                         priv->edit_mode = FALSE;
460                         priv->edit_command = command;
461                         g_object_set (G_OBJECT (priv->folder_view), 
462                                       "hildon-ui-mode", HILDON_UI_MODE_NORMAL, 
463                                       NULL);
464                         gtk_widget_queue_resize (priv->folder_view);
465                         gtk_window_unfullscreen (GTK_WINDOW (self));
466                 }
467         } else {
468                 if (!priv->edit_mode) {
469                         GtkTreeSelection *selection;
470
471                         g_object_set (G_OBJECT (priv->folder_view),
472                                       "hildon-ui-mode", HILDON_UI_MODE_EDIT,
473                                       NULL);
474                         selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->folder_view));
475                         gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
476                         gtk_tree_selection_unselect_all (selection);
477
478                         priv->edit_mode = TRUE;
479                         priv->edit_command = command;
480
481                         /* Setup toolbar */
482                         priv->edit_toolbar = hildon_edit_toolbar_new ();
483                         switch (command) {
484                         case EDIT_MODE_COMMAND_DELETE:
485                                 hildon_edit_toolbar_set_label (HILDON_EDIT_TOOLBAR (priv->edit_toolbar),
486                                                                _("TODO: Select folder to delete"));
487                                 hildon_edit_toolbar_set_button_label (HILDON_EDIT_TOOLBAR (priv->edit_toolbar),
488                                                                       _("TODO: Delete"));
489                                 break;
490                         case EDIT_MODE_COMMAND_MOVE:
491                                 hildon_edit_toolbar_set_label (HILDON_EDIT_TOOLBAR (priv->edit_toolbar),
492                                                                _("TODO: Select folder to move"));
493                                 hildon_edit_toolbar_set_button_label (HILDON_EDIT_TOOLBAR (priv->edit_toolbar),
494                                                                       _("TODO: Move"));
495                                 break;
496                         case EDIT_MODE_COMMAND_RENAME:
497                                 hildon_edit_toolbar_set_label (HILDON_EDIT_TOOLBAR (priv->edit_toolbar),
498                                                                _("TODO: Select folder to rename"));
499                                 hildon_edit_toolbar_set_button_label (HILDON_EDIT_TOOLBAR (priv->edit_toolbar),
500                                                                       _("TODO: Rename"));
501                                 break;
502                         case EDIT_MODE_COMMAND_NONE:
503                                 g_assert ("Shouldn't reach");
504                         }
505                         modest_hildon2_window_pack_toolbar (MODEST_HILDON2_WINDOW (self), GTK_PACK_START,
506                                                             priv->edit_toolbar);
507                         g_signal_connect (G_OBJECT (priv->edit_toolbar), "button-clicked",
508                                           G_CALLBACK (edit_toolbar_button_clicked), (gpointer) self);
509                         g_signal_connect (G_OBJECT (priv->edit_toolbar), "arrow-clicked",
510                                           G_CALLBACK (edit_toolbar_arrow_clicked), (gpointer) self);
511                         gtk_widget_show (priv->edit_toolbar);
512
513                         gtk_widget_queue_resize (priv->folder_view);
514                         gtk_window_fullscreen (GTK_WINDOW (self));
515                 }
516         }
517 }
518
519 static void
520 edit_toolbar_button_clicked (HildonEditToolbar *toolbar,
521                              ModestFolderWindow *self)
522 {
523         ModestFolderWindowPrivate *priv = MODEST_FOLDER_WINDOW_GET_PRIVATE (self);
524
525         switch (priv->edit_command) {
526         case EDIT_MODE_COMMAND_DELETE:
527                 if (modest_ui_actions_on_edit_mode_delete_folder (MODEST_WINDOW (self)))
528                         set_edit_mode (self, EDIT_MODE_COMMAND_NONE);
529                 break;
530         case EDIT_MODE_COMMAND_MOVE:
531                 if (modest_ui_actions_on_edit_mode_move_to (MODEST_WINDOW (self)))
532                         set_edit_mode (self, EDIT_MODE_COMMAND_NONE);
533                 break;
534         case EDIT_MODE_COMMAND_RENAME:
535                 if (modest_ui_actions_on_edit_mode_rename_folder (MODEST_WINDOW (self)))
536                         set_edit_mode (self, EDIT_MODE_COMMAND_NONE);
537                 break;
538         case EDIT_MODE_COMMAND_NONE:
539                         g_assert_not_reached ();
540         }
541 }
542
543 static void
544 edit_toolbar_arrow_clicked (HildonEditToolbar *toolbar,
545                             ModestFolderWindow *self)
546 {
547         set_edit_mode (self, EDIT_MODE_COMMAND_NONE);
548 }
549
550 static void
551 set_delete_edit_mode (GtkButton *button,
552                       ModestFolderWindow *self)
553 {
554         set_edit_mode (self, EDIT_MODE_COMMAND_DELETE);
555 }
556
557 static void
558 set_moveto_edit_mode (GtkButton *button,
559                       ModestFolderWindow *self)
560 {
561         set_edit_mode (self, EDIT_MODE_COMMAND_MOVE);
562 }
563
564 static void
565 set_rename_edit_mode (GtkButton *button,
566                       ModestFolderWindow *self)
567 {
568         set_edit_mode (self, EDIT_MODE_COMMAND_RENAME);
569 }
570
571 static void
572 modest_folder_window_pack_toolbar (ModestHildon2Window *self,
573                                    GtkPackType pack_type,
574                                    GtkWidget *toolbar)
575 {
576         ModestFolderWindowPrivate *priv;
577
578         g_return_if_fail (MODEST_IS_FOLDER_WINDOW (self));
579         priv = MODEST_FOLDER_WINDOW_GET_PRIVATE (self);
580
581         if (pack_type == GTK_PACK_START) {
582                 gtk_box_pack_start (GTK_BOX (priv->top_vbox), toolbar, FALSE, FALSE, 0);
583         } else {
584                 gtk_box_pack_end (GTK_BOX (priv->top_vbox), toolbar, FALSE, FALSE, 0);
585         }
586 }