[libgda] GdaBrowser: don't show tabs in fullscreen mode
- From: Vivien Malerba <vivien src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda] GdaBrowser: don't show tabs in fullscreen mode
- Date: Wed, 4 Aug 2010 17:50:00 +0000 (UTC)
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]