aboutsummaryrefslogtreecommitdiffstats
path: root/shell/e-shell-view.c
diff options
context:
space:
mode:
Diffstat (limited to 'shell/e-shell-view.c')
-rw-r--r--shell/e-shell-view.c50
1 files changed, 46 insertions, 4 deletions
diff --git a/shell/e-shell-view.c b/shell/e-shell-view.c
index 8891013749..bd36c0df07 100644
--- a/shell/e-shell-view.c
+++ b/shell/e-shell-view.c
@@ -139,6 +139,8 @@ bonobo_widget_is_dead (BonoboWidget *bonobo_widget)
/* Folder bar pop-up handling. */
+static void disconnect_popup_signals (EShellView *shell_view);
+
static void
storage_set_view_box_button_release_event_cb (GtkWidget *widget,
GdkEventButton *button_event,
@@ -155,12 +157,46 @@ storage_set_view_box_button_release_event_cb (GtkWidget *widget,
e_shell_view_set_folder_bar_mode (shell_view, E_SHELL_VIEW_SUBWINDOW_HIDDEN);
+ disconnect_popup_signals (shell_view);
+
+ e_shell_folder_title_bar_set_toggle_state (E_SHELL_FOLDER_TITLE_BAR (priv->view_title_bar), FALSE);
+}
+
+static void
+popup_storage_set_view_close_button_clicked (ETitleBar *title_bar,
+ void *data)
+{
+ EShellView *shell_view;
+ EShellViewPrivate *priv;
+
+ shell_view = E_SHELL_VIEW (data);
+ priv = shell_view->priv;
+
+ gdk_pointer_ungrab (GDK_CURRENT_TIME);
+ gtk_grab_remove (priv->storage_set_view_box);
+
+ disconnect_popup_signals (shell_view);
+
+ e_shell_view_set_folder_bar_mode (shell_view, E_SHELL_VIEW_SUBWINDOW_STICKY);
+ e_shell_folder_title_bar_set_toggle_state (E_SHELL_FOLDER_TITLE_BAR (priv->view_title_bar), FALSE);
+}
+
+static void
+disconnect_popup_signals (EShellView *shell_view)
+{
+ EShellViewPrivate *priv;
+
+ priv = shell_view->priv;
+
gtk_signal_disconnect_by_func (GTK_OBJECT (priv->storage_set_view_box),
GTK_SIGNAL_FUNC (storage_set_view_box_button_release_event_cb),
shell_view);
gtk_signal_disconnect_by_func (GTK_OBJECT (priv->storage_set_view),
GTK_SIGNAL_FUNC (storage_set_view_box_button_release_event_cb),
shell_view);
+ gtk_signal_disconnect_by_func (GTK_OBJECT (priv->storage_set_title_bar),
+ GTK_SIGNAL_FUNC (popup_storage_set_view_close_button_clicked),
+ shell_view);
}
static void
@@ -190,6 +226,8 @@ storage_set_view_box_map_cb (GtkWidget *widget,
GTK_SIGNAL_FUNC (storage_set_view_box_button_release_event_cb), shell_view);
gtk_signal_connect (GTK_OBJECT (priv->storage_set_view), "button_release_event",
GTK_SIGNAL_FUNC (storage_set_view_box_button_release_event_cb), shell_view);
+ gtk_signal_connect (GTK_OBJECT (priv->storage_set_title_bar), "close_button_clicked",
+ GTK_SIGNAL_FUNC (popup_storage_set_view_close_button_clicked), shell_view);
}
static void
@@ -257,15 +295,19 @@ storage_set_view_close_button_clicked_cb (ETitleBar *title_bar,
e_shell_view_set_folder_bar_mode (shell_view, E_SHELL_VIEW_SUBWINDOW_HIDDEN);
}
-/* Callback called when the title bar button has been clicked. */
+/* Callback called when the title bar button has been pressed. */
static void
-title_bar_clicked_cb (EShellFolderTitleBar *title_bar,
+title_bar_toggled_cb (EShellFolderTitleBar *title_bar,
+ gboolean state,
void *data)
{
EShellView *shell_view;
shell_view = E_SHELL_VIEW (data);
+ if (! state)
+ return;
+
if (e_shell_view_get_folder_bar_mode (shell_view) != E_SHELL_VIEW_SUBWINDOW_TRANSIENT)
pop_up_folder_bar (shell_view);
}
@@ -349,8 +391,8 @@ setup_widgets (EShellView *shell_view)
gtk_container_set_border_width (GTK_CONTAINER (priv->view_vbox), 2);
priv->view_title_bar = e_shell_folder_title_bar_new ();
- gtk_signal_connect (GTK_OBJECT (priv->view_title_bar), "title_clicked",
- GTK_SIGNAL_FUNC (title_bar_clicked_cb), shell_view);
+ gtk_signal_connect (GTK_OBJECT (priv->view_title_bar), "title_toggled",
+ GTK_SIGNAL_FUNC (title_bar_toggled_cb), shell_view);
priv->view_hpaned = e_hpaned_new ();
e_paned_add1 (E_PANED (priv->view_hpaned), priv->storage_set_view_box);