[libgda] GdaBrowser: don't show tabs in fullscreen mode



commit 3420408a30743447e577e0b5cfffcc1799ae2481
Author: Vivien Malerba <malerba gnome-db org>
Date:   Wed Aug 4 19:33:59 2010 +0200

    GdaBrowser: don't show tabs in fullscreen mode
    
    if there is only one tab

 tools/browser/browser-window.c                     |   36 ++++++++++++++-
 tools/browser/browser-window.h                     |    5 ++
 .../data-manager/data-manager-perspective.c        |   49 +++++++++++++++++++-
 tools/browser/doc/gda-browser-sections.txt         |    1 +
 tools/browser/doc/tmpl/browser-window.sgml         |   17 +++++++
 tools/browser/query-exec/query-exec-perspective.c  |   49 +++++++++++++++++++-
 6 files changed, 154 insertions(+), 3 deletions(-)
---
diff --git a/tools/browser/browser-window.c b/tools/browser/browser-window.c
index 72ce748..d3d8f5e 100644
--- a/tools/browser/browser-window.c
+++ b/tools/browser/browser-window.c
@@ -67,6 +67,14 @@ static void connection_removed_cb (BrowserCore *bcore, BrowserConnection *bcnc,
 static void transaction_status_changed_cb (BrowserConnection *bcnc, BrowserWindow *bwin);
 
 
+enum {
+        FULLSCREEN_CHANGED,
+        LAST_SIGNAL
+};
+
+static gint browser_window_signals[LAST_SIGNAL] = { 0 };
+
+
 /* get a pointer to the parents to be able to call their destructor */
 static GObjectClass  *parent_class = NULL;
 
@@ -90,6 +98,8 @@ struct _BrowserWindowPrivate {
 
 	GtkWidget         *statusbar;
 	guint              cnc_statusbar_context;
+
+	gboolean           fullscreen;
 };
 
 GType
@@ -125,11 +135,21 @@ browser_window_class_init (BrowserWindowClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-	widget_class->window_state_event = window_state_event;
 
+	widget_class->window_state_event = window_state_event;
 	parent_class = g_type_class_peek_parent (klass);
 
+	browser_window_signals[FULLSCREEN_CHANGED] =
+                g_signal_new ("fullscreen_changed",
+                              G_TYPE_FROM_CLASS (object_class),
+                              G_SIGNAL_RUN_LAST,
+                              G_STRUCT_OFFSET (BrowserWindowClass, fullscreen_changed),
+                              NULL, NULL,
+                              g_cclosure_marshal_VOID__BOOLEAN,
+                              G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
 	object_class->dispose = browser_window_dispose;
+	klass->fullscreen_changed = NULL;
 }
 
 static void
@@ -143,6 +163,7 @@ browser_window_init (BrowserWindow *bwin)
 	bwin->priv->cnc_added_sigid = 0;
 	bwin->priv->cnc_removed_sigid = 0;
 	bwin->priv->updating_transaction_status = FALSE;
+	bwin->priv->fullscreen = FALSE;
 }
 
 static void
@@ -886,6 +907,7 @@ window_state_event (GtkWidget *widget, GdkEventWindowState *event)
 		wid = gtk_ui_manager_get_widget (bwin->priv->ui_manager, "/ToolBar");
 
                 fullscreen = event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN;
+		bwin->priv->fullscreen = fullscreen;
 		if (fullscreen) {
 			gtk_toolbar_set_style (GTK_TOOLBAR (wid), GTK_TOOLBAR_ICONS);
 			browser_spinner_set_size (BROWSER_SPINNER (bwin->priv->spinner),
@@ -904,6 +926,7 @@ window_state_event (GtkWidget *widget, GdkEventWindowState *event)
 			gtk_widget_show (wid);
 		
 		gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (bwin->priv->statusbar), !fullscreen);
+		g_signal_emit (G_OBJECT (bwin), browser_window_signals[FULLSCREEN_CHANGED], 0, fullscreen);
         }
 	return FALSE;
 }
@@ -1303,3 +1326,14 @@ browser_window_change_perspective (BrowserWindow *bwin, const gchar *perspective
 
 	return bpers;
 }
+
+/**
+ * browser_window_is_fullscreen
+ * @bwin: a #BrowserWindow
+ */
+gboolean
+browser_window_is_fullscreen (BrowserWindow *bwin)
+{
+	g_return_val_if_fail (BROWSER_IS_WINDOW (bwin), FALSE);
+	return bwin->priv->fullscreen;
+}
diff --git a/tools/browser/browser-window.h b/tools/browser/browser-window.h
index 3f19488..302214a 100644
--- a/tools/browser/browser-window.h
+++ b/tools/browser/browser-window.h
@@ -46,6 +46,9 @@ struct _BrowserWindow
 struct _BrowserWindowClass
 {
 	GtkWindowClass        parent_class;
+	
+	/* signals */
+	void                (*fullscreen_changed) (BrowserWindow *bwin, gboolean fullscreen);
 };
 
 GType               browser_window_get_type               (void) G_GNUC_CONST;
@@ -62,6 +65,8 @@ void                browser_window_customize_perspective_ui (BrowserWindow *bwin
 
 BrowserPerspective *browser_window_change_perspective     (BrowserWindow *bwin, const gchar *perspective);
 
+gboolean            browser_window_is_fullscreen          (BrowserWindow *bwin);
+
 G_END_DECLS
 
 #endif
diff --git a/tools/browser/data-manager/data-manager-perspective.c b/tools/browser/data-manager/data-manager-perspective.c
index 31888bf..bc330f7 100644
--- a/tools/browser/data-manager/data-manager-perspective.c
+++ b/tools/browser/data-manager/data-manager-perspective.c
@@ -41,6 +41,8 @@ static const gchar         *data_manager_perspective_get_actions_ui (BrowserPers
 static void                 data_manager_perspective_get_current_customization (BrowserPerspective *perspective,
 										GtkActionGroup **out_agroup,
 										const gchar **out_ui);
+static void                 adapt_notebook_for_fullscreen (DataManagerPerspective *perspective);
+
 
 /* get a pointer to the parents to be able to call their destructor */
 static GObjectClass  *parent_class = NULL;
@@ -51,6 +53,7 @@ struct _DataManagerPerspectivePriv {
 	gboolean favorites_shown;
 	BrowserWindow *bwin;
         BrowserConnection *bcnc;
+	gboolean fullscreen;
 };
 
 GType
@@ -122,6 +125,7 @@ data_manager_perspective_init (DataManagerPerspective *perspective)
 {
 	perspective->priv = g_new0 (DataManagerPerspectivePriv, 1);
 	perspective->priv->favorites_shown = TRUE;
+	perspective->priv->fullscreen = FALSE;
 }
 
 static void fav_selection_changed_cb (GtkWidget *widget, gint fav_id, BrowserFavoritesType fav_type,
@@ -129,9 +133,13 @@ static void fav_selection_changed_cb (GtkWidget *widget, gint fav_id, BrowserFav
 static void nb_switch_page_cb (GtkNotebook *nb, GtkNotebookPage *page, gint page_num,
                                DataManagerPerspective *perspective);
 static void nb_page_removed_cb (GtkNotebook *nb, GtkNotebookPage *page, gint page_num,
-                               DataManagerPerspective *perspective);
+				DataManagerPerspective *perspective);
+static void nb_page_added_cb (GtkNotebook *nb, GtkNotebookPage *page, gint page_num,
+			      DataManagerPerspective *perspective);
 static void close_button_clicked_cb (GtkWidget *wid, GtkWidget *page_widget);
 
+static void fullscreen_changed_cb (BrowserWindow *bwin, gboolean fullscreen, DataManagerPerspective *perspective);
+
 /**
  * data_manager_perspective_new
  *
@@ -147,8 +155,11 @@ data_manager_perspective_new (BrowserWindow *bwin)
 	perspective = (DataManagerPerspective*) bpers;
 
 	perspective->priv->bwin = bwin;
+	g_signal_connect (bwin, "fullscreen-changed",
+			  G_CALLBACK (fullscreen_changed_cb), bpers);
         bcnc = browser_window_get_connection (bwin);
         perspective->priv->bcnc = g_object_ref (bcnc);
+	perspective->priv->fullscreen = browser_window_is_fullscreen (bwin);
 
 	/* contents */
         GtkWidget *paned, *nb, *wid;
@@ -169,6 +180,8 @@ data_manager_perspective_new (BrowserWindow *bwin)
                           G_CALLBACK (nb_switch_page_cb), perspective);
         g_signal_connect (G_OBJECT (nb), "page-removed",
                           G_CALLBACK (nb_page_removed_cb), perspective);
+        g_signal_connect (G_OBJECT (nb), "page-added",
+                          G_CALLBACK (nb_page_added_cb), perspective);
 
 	GtkWidget *page, *tlabel, *button;
 	page = data_console_new (bcnc);
@@ -194,6 +207,9 @@ data_manager_perspective_new (BrowserWindow *bwin)
 
 	gtk_widget_grab_focus (page);
 
+	if (perspective->priv->fullscreen)
+		adapt_notebook_for_fullscreen (perspective);
+
 	return bpers;
 }
 
@@ -222,6 +238,7 @@ add_new_data_console (BrowserPerspective *bpers, gint fav_id)
 
 	tlabel = browser_page_get_tab_label (BROWSER_PAGE (page), NULL);
         gtk_notebook_set_menu_label (GTK_NOTEBOOK (perspective->priv->notebook), page, tlabel);
+	adapt_notebook_for_fullscreen (perspective);
 
 	return DATA_CONSOLE (page);
 }
@@ -287,6 +304,14 @@ nb_page_removed_cb (GtkNotebook *nb, GtkNotebookPage *page, gint page_num,
                                                          BROWSER_PERSPECTIVE (perspective),
                                                          NULL, NULL);
         }
+	adapt_notebook_for_fullscreen (perspective);
+}
+
+static void
+nb_page_added_cb (GtkNotebook *nb, GtkNotebookPage *page, gint page_num,
+		  DataManagerPerspective *perspective)
+{
+	adapt_notebook_for_fullscreen (perspective);
 }
 
 static void
@@ -296,6 +321,24 @@ close_button_clicked_cb (GtkWidget *wid, GtkWidget *page_widget)
 }
 
 static void
+adapt_notebook_for_fullscreen (DataManagerPerspective *perspective)
+{
+	gboolean showtabs = TRUE;
+	
+	if (perspective->priv->fullscreen && 
+	    gtk_notebook_get_n_pages (GTK_NOTEBOOK (perspective->priv->notebook)) == 1)
+		showtabs = FALSE;
+	gtk_notebook_set_show_tabs (GTK_NOTEBOOK (perspective->priv->notebook), showtabs);
+}
+
+static void
+fullscreen_changed_cb (BrowserWindow *bwin, gboolean fullscreen, DataManagerPerspective *perspective)
+{
+	perspective->priv->fullscreen = fullscreen;
+	adapt_notebook_for_fullscreen (perspective);
+}
+
+static void
 data_manager_perspective_dispose (GObject *object)
 {
 	DataManagerPerspective *perspective;
@@ -310,6 +353,10 @@ data_manager_perspective_dispose (GObject *object)
 
                 g_signal_handlers_disconnect_by_func (perspective->priv->notebook,
                                                       G_CALLBACK (nb_page_removed_cb), perspective);
+                g_signal_handlers_disconnect_by_func (perspective->priv->notebook,
+                                                      G_CALLBACK (nb_page_added_cb), perspective);
+                g_signal_handlers_disconnect_by_func (perspective->priv->notebook,
+                                                      G_CALLBACK (nb_switch_page_cb), perspective);
                 g_free (perspective->priv);
                 perspective->priv = NULL;
         }
diff --git a/tools/browser/doc/gda-browser-sections.txt b/tools/browser/doc/gda-browser-sections.txt
index cd5c7e8..08817ad 100644
--- a/tools/browser/doc/gda-browser-sections.txt
+++ b/tools/browser/doc/gda-browser-sections.txt
@@ -9,6 +9,7 @@ browser_window_push_status
 browser_window_pop_status
 browser_window_customize_perspective_ui
 browser_window_change_perspective
+browser_window_is_fullscreen
 <SUBSECTION Standard>
 BROWSER_WINDOW
 BROWSER_IS_WINDOW
diff --git a/tools/browser/doc/tmpl/browser-window.sgml b/tools/browser/doc/tmpl/browser-window.sgml
index e04adeb..0881a1f 100644
--- a/tools/browser/doc/tmpl/browser-window.sgml
+++ b/tools/browser/doc/tmpl/browser-window.sgml
@@ -33,6 +33,14 @@ Top level browser window
 </para>
 
 
+<!-- ##### SIGNAL BrowserWindow::fullscreen-changed ##### -->
+<para>
+
+</para>
+
+ browserwindow: the object which received the signal.
+ arg1: 
+
 <!-- ##### FUNCTION browser_window_new ##### -->
 <para>
 
@@ -94,3 +102,12 @@ Top level browser window
 @Returns: 
 
 
+<!-- ##### FUNCTION browser_window_is_fullscreen ##### -->
+<para>
+
+</para>
+
+ bwin: 
+ Returns: 
+
+
diff --git a/tools/browser/query-exec/query-exec-perspective.c b/tools/browser/query-exec/query-exec-perspective.c
index 8495017..6cbc1a2 100644
--- a/tools/browser/query-exec/query-exec-perspective.c
+++ b/tools/browser/query-exec/query-exec-perspective.c
@@ -46,6 +46,8 @@ static void                 query_exec_perspective_get_current_customization (Br
 									      const gchar **out_ui);
 static void                 query_exec_perspective_page_tab_label_change (BrowserPerspective *perspective, BrowserPage *page);
 
+static void                 adapt_notebook_for_fullscreen (QueryExecPerspective *perspective);
+
 /* get a pointer to the parents to be able to call their destructor */
 static GObjectClass  *parent_class = NULL;
 
@@ -57,6 +59,7 @@ struct _QueryExecPerspectivePrivate {
 	BrowserConnection *bcnc;
 	
 	GtkActionGroup *action_group;
+	gboolean fullscreen;
 };
 
 GType
@@ -129,6 +132,7 @@ query_exec_perspective_init (QueryExecPerspective *perspective)
 	perspective->priv = g_new0 (QueryExecPerspectivePrivate, 1);
 	perspective->priv->action_group = NULL;
 	perspective->priv->favorites_shown = TRUE;
+	perspective->priv->fullscreen = FALSE;
 }
 
 static void fav_selection_changed_cb (GtkWidget *widget, gint fav_id, BrowserFavoritesType fav_type,
@@ -136,8 +140,11 @@ static void fav_selection_changed_cb (GtkWidget *widget, gint fav_id, BrowserFav
 static void nb_switch_page_cb (GtkNotebook *nb, GtkNotebookPage *page, gint page_num,
 			       QueryExecPerspective *perspective);
 static void nb_page_removed_cb (GtkNotebook *nb, GtkNotebookPage *page, gint page_num,
-			       QueryExecPerspective *perspective);
+				QueryExecPerspective *perspective);
+static void nb_page_added_cb (GtkNotebook *nb, GtkNotebookPage *page, gint page_num,
+			      QueryExecPerspective *perspective);
 static void close_button_clicked_cb (GtkWidget *wid, GtkWidget *page_widget);
+static void fullscreen_changed_cb (BrowserWindow *bwin, gboolean fullscreen, QueryExecPerspective *perspective);
 
 /**
  * query_exec_perspective_new
@@ -155,8 +162,11 @@ query_exec_perspective_new (BrowserWindow *bwin)
 	perspective = (QueryExecPerspective*) bpers;
 
 	perspective->priv->bwin = bwin;
+	g_signal_connect (bwin, "fullscreen-changed",
+			  G_CALLBACK (fullscreen_changed_cb), bpers);
 	bcnc = browser_window_get_connection (bwin);
 	perspective->priv->bcnc = g_object_ref (bcnc);
+	perspective->priv->fullscreen = browser_window_is_fullscreen (bwin);
 
 	/* contents */
 	GtkWidget *paned, *nb, *wid;
@@ -203,6 +213,11 @@ query_exec_perspective_new (BrowserWindow *bwin)
 			  G_CALLBACK (nb_switch_page_cb), perspective);
 	g_signal_connect (G_OBJECT (nb), "page-removed",
 			  G_CALLBACK (nb_page_removed_cb), perspective);
+	g_signal_connect (G_OBJECT (nb), "page-added",
+			  G_CALLBACK (nb_page_added_cb), perspective);
+
+	if (perspective->priv->fullscreen)
+		adapt_notebook_for_fullscreen (perspective);
 
 	return bpers;
 }
@@ -256,6 +271,14 @@ nb_page_removed_cb (GtkNotebook *nb, GtkNotebookPage *page, gint page_num,
 							 BROWSER_PERSPECTIVE (perspective),
 							 NULL, NULL);
 	}
+	adapt_notebook_for_fullscreen (perspective);
+}
+
+static void
+nb_page_added_cb (GtkNotebook *nb, GtkNotebookPage *page, gint page_num,
+		  QueryExecPerspective *perspective)
+{
+	adapt_notebook_for_fullscreen (perspective);
 }
 
 static void
@@ -265,6 +288,24 @@ close_button_clicked_cb (GtkWidget *wid, GtkWidget *page_widget)
 }
 
 static void
+adapt_notebook_for_fullscreen (QueryExecPerspective *perspective)
+{
+	gboolean showtabs = TRUE;
+	
+	if (perspective->priv->fullscreen && 
+	    gtk_notebook_get_n_pages (GTK_NOTEBOOK (perspective->priv->notebook)) == 1)
+		showtabs = FALSE;
+	gtk_notebook_set_show_tabs (GTK_NOTEBOOK (perspective->priv->notebook), showtabs);
+}
+
+static void
+fullscreen_changed_cb (BrowserWindow *bwin, gboolean fullscreen, QueryExecPerspective *perspective)
+{
+	perspective->priv->fullscreen = fullscreen;
+	adapt_notebook_for_fullscreen (perspective);
+}
+
+static void
 query_exec_perspective_dispose (GObject *object)
 {
 	QueryExecPerspective *perspective;
@@ -282,6 +323,10 @@ query_exec_perspective_dispose (GObject *object)
 
 		g_signal_handlers_disconnect_by_func (perspective->priv->notebook,
 						      G_CALLBACK (nb_page_removed_cb), perspective);
+		g_signal_handlers_disconnect_by_func (perspective->priv->notebook,
+						      G_CALLBACK (nb_page_added_cb), perspective);
+		g_signal_handlers_disconnect_by_func (perspective->priv->notebook,
+						      G_CALLBACK (nb_switch_page_cb), perspective);
 		g_free (perspective->priv);
 		perspective->priv = NULL;
 	}
@@ -319,6 +364,8 @@ query_exec_add_cb (GtkAction *action, BrowserPerspective *bpers)
 	gtk_notebook_set_menu_label (GTK_NOTEBOOK (perspective->priv->notebook), page, tlabel);
 
 	gtk_widget_grab_focus (page);
+
+	adapt_notebook_for_fullscreen (perspective);
 }
 
 static void



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]