gnome-terminal r2573 - trunk/src
- From: chpe svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-terminal r2573 - trunk/src
- Date: Thu, 29 May 2008 19:34:51 +0000 (UTC)
Author: chpe
Date: Thu May 29 19:34:50 2008
New Revision: 2573
URL: http://svn.gnome.org/viewvc/gnome-terminal?rev=2573&view=rev
Log:
Add terminal-screen-container.[ch], to move the scrollbar logic out of TerminalScreen.
We really want to put the screen into a GtkScrolledWindow, but that doesn't work yet.
Make TerminalScreen inherit directly from VteTerminal.
Added:
trunk/src/terminal-screen-container.c
trunk/src/terminal-screen-container.h
Modified:
trunk/src/Makefile.am
trunk/src/terminal-screen.c
trunk/src/terminal-screen.h
trunk/src/terminal-tabs-menu.c
trunk/src/terminal-widget-vte.c
trunk/src/terminal-widget.h
trunk/src/terminal-window.c
Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am (original)
+++ trunk/src/Makefile.am Thu May 29 19:34:50 2008
@@ -37,6 +37,8 @@
terminal-profile.h \
terminal-screen.c \
terminal-screen.h \
+ terminal-screen-container.c \
+ terminal-screen-container.h \
terminal-tabs-menu.c \
terminal-tabs-menu.h \
terminal-widget.h \
Added: trunk/src/terminal-screen-container.c
==============================================================================
--- (empty file)
+++ trunk/src/terminal-screen-container.c Thu May 29 19:34:50 2008
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2008 Christian Persch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#include <config.h>
+
+#include "terminal-widget.h"
+#include "terminal-screen-container.h"
+
+#define SCREEN_DATA_KEY "TSC::Screen"
+#define SCROLLBAR_DATA_KEY "TSC::Scrollbar"
+
+GtkWidget *
+terminal_screen_container_new (TerminalScreen *screen)
+{
+#ifdef USE_SCROLLED_WINDOW
+ GtkWidget *scrolled_window;
+
+ g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL);
+
+ scrolled_window = gtk_scrolled_window_new (NULL, terminal_widget_get_scroll_adjustment (GTK_WIDGET (screen)));
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),
+ GTK_SHADOW_NONE);
+ gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (screen));
+ gtk_widget_show (GTK_WIDGET (screen));
+
+ return scrolled_window;
+#else
+ GtkWidget *hbox, *scrollbar;
+
+ g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+
+ scrollbar = gtk_vscrollbar_new (terminal_widget_get_scroll_adjustment (GTK_WIDGET (screen)));
+
+ gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (screen), TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
+
+ g_object_set_data (G_OBJECT (hbox), SCREEN_DATA_KEY, screen);
+ g_object_set_data (G_OBJECT (hbox), SCROLLBAR_DATA_KEY, scrollbar);
+
+ gtk_widget_show_all (hbox);
+
+ return hbox;
+#endif
+}
+
+TerminalScreen *
+terminal_screen_container_get_screen (GtkWidget *container)
+{
+#ifdef USE_SCROLLED_WINDOW
+ g_return_val_if_fail (GTK_IS_SCROLLED_WINDOW (container), NULL);
+
+ return TERMINAL_SCREEN (gtk_bin_get_child (GTK_BIN (container)));
+#else
+ g_return_val_if_fail (GTK_IS_HBOX (container), NULL);
+
+ return TERMINAL_SCREEN (g_object_get_data (G_OBJECT (container), SCREEN_DATA_KEY));
+#endif
+}
+
+#ifndef USE_SCROLLED_WINDOW
+GtkWidget *
+terminal_screen_container_get_scrollbar (GtkWidget *container)
+{
+ return g_object_get_data (G_OBJECT (container), SCROLLBAR_DATA_KEY);
+}
+#endif
+
+void
+terminal_screen_container_set_policy (GtkWidget *container,
+ GtkPolicyType hpolicy G_GNUC_UNUSED,
+ GtkPolicyType vpolicy)
+{
+#ifdef USE_SCROLLED_WINDOW
+ g_return_if_fail (GTK_IS_SCROLLED_WINDOW (container));
+
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (container), hpolicy, vpolicy);
+#else
+ GtkWidget *scrollbar;
+
+ g_return_if_fail (GTK_IS_HBOX (container));
+
+ scrollbar = terminal_screen_container_get_scrollbar (container);
+ switch (vpolicy) {
+ case GTK_POLICY_NEVER:
+ gtk_widget_hide (scrollbar);
+ break;
+ case GTK_POLICY_AUTOMATIC:
+ case GTK_POLICY_ALWAYS:
+ gtk_widget_show (scrollbar);
+ break;
+ }
+#endif
+}
+
+void
+terminal_screen_container_set_placement (GtkWidget *container,
+ GtkCornerType corner)
+{
+#ifdef USE_SCROLLED_WINDOW
+ g_return_if_fail (GTK_IS_SCROLLED_WINDOW (container));
+
+ gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (container), corner);
+#else
+ GtkWidget *scrollbar;
+
+ g_return_if_fail (GTK_IS_HBOX (container));
+
+ scrollbar = terminal_screen_container_get_scrollbar (container);
+ switch (corner) {
+ case GTK_CORNER_TOP_LEFT:
+ case GTK_CORNER_BOTTOM_LEFT:
+ gtk_box_reorder_child (GTK_BOX (container), scrollbar, 1);
+ break;
+ case GTK_CORNER_TOP_RIGHT:
+ case GTK_CORNER_BOTTOM_RIGHT:
+ gtk_box_reorder_child (GTK_BOX (container), scrollbar, 0);
+ break;
+ }
+#endif
+}
Added: trunk/src/terminal-screen-container.h
==============================================================================
--- (empty file)
+++ trunk/src/terminal-screen-container.h Thu May 29 19:34:50 2008
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2008 Christian Persch
+*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef TERMINAL_SCREEN_CONTAINER_H
+#define TERMINAL_SCREEN_CONTAINER_H
+
+#include <gtk/gtk.h>
+#include "terminal-screen.h"
+
+G_BEGIN_DECLS
+
+GtkWidget *terminal_screen_container_new (TerminalScreen *screen);
+
+TerminalScreen *terminal_screen_container_get_screen (GtkWidget *container);
+
+void terminal_screen_container_set_policy (GtkWidget *container,
+ GtkPolicyType hpolicy,
+ GtkPolicyType vpolicy);
+
+void terminal_screen_container_set_placement (GtkWidget *container,
+ GtkCornerType corner);
+
+G_END_DECLS
+
+#endif /* TERMINAL_SCREEN_CONTAINER_H */
Modified: trunk/src/terminal-screen.c
==============================================================================
--- trunk/src/terminal-screen.c (original)
+++ trunk/src/terminal-screen.c Thu May 29 19:34:50 2008
@@ -35,6 +35,7 @@
#include "terminal-window.h"
#include "terminal-widget.h"
#include "terminal-profile.h"
+#include "terminal-screen-container.h"
#include "terminal.h"
#include "skey-popup.h"
#include <libgnome/gnome-util.h> /* gnome_util_user_shell */
@@ -67,16 +68,11 @@
double font_scale;
guint recheck_working_dir_idle;
guint gconf_connection_id;
- GtkWidget *hbox;
- GtkWidget *scrollbar;
gboolean user_title; /* title was manually set */
};
enum {
PROFILE_SET,
- ICON_TITLE_CHANGED,
- SELECTION_CHANGED,
- ENCODING_CHANGED,
SHOW_POPUP_MENU,
LAST_SIGNAL
};
@@ -90,11 +86,6 @@
static void terminal_screen_class_init (TerminalScreenClass *klass);
static void terminal_screen_dispose (GObject *object);
static void terminal_screen_finalize (GObject *object);
-static void terminal_screen_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation);
-static void terminal_screen_size_request (GtkWidget *widget,
- GtkRequisition *requisition);
-static void terminal_screen_map (GtkWidget *widget);
static void terminal_screen_update_on_realize (GtkWidget *widget,
TerminalScreen *screen);
static void terminal_screen_change_font (TerminalScreen *screen);
@@ -112,12 +103,6 @@
static void terminal_screen_widget_child_died (GtkWidget *term,
TerminalScreen *screen);
-static void terminal_screen_widget_selection_changed (GtkWidget *term,
- TerminalScreen *screen);
-
-static void terminal_screen_widget_encoding_changed (GtkWidget *term,
- TerminalScreen *screen);
-
static void terminal_screen_setup_dnd (TerminalScreen *screen);
static void update_color_scheme (TerminalScreen *screen);
@@ -136,7 +121,7 @@
static guint signals[LAST_SIGNAL];
-G_DEFINE_TYPE (TerminalScreen, terminal_screen, GTK_TYPE_BIN)
+G_DEFINE_TYPE (TerminalScreen, terminal_screen, VTE_TYPE_TERMINAL)
static void
style_set_callback (GtkWidget *widget,
@@ -147,28 +132,41 @@
terminal_screen_change_font (TERMINAL_SCREEN (data));
}
+#ifdef DEBUG_GEOMETRY
+static void
+parent_size_request (GtkWidget *scrolled_window, GtkRequisition *req, GtkWidget *screen)
+{
+ g_print ("screen %p scrolled-window size req %d : %d\n", screen, req->width, req->height);
+}
+#endif
+
static void
parent_set_callback (TerminalScreen *screen,
GtkWidget *old_parent)
{
TerminalScreenPrivate *priv = screen->priv;
+#ifdef DEBUG_GEOMETRY
+ if (old_parent)
+ g_signal_handlers_disconnect_by_func (old_parent, G_CALLBACK (parent_size_request), screen);
+ if (GTK_WIDGET (screen)->parent)
+ g_signal_connect (GTK_WIDGET (screen)->parent, "size-request", G_CALLBACK (parent_size_request), screen);
+#endif
+
if (GTK_WIDGET (screen)->parent == NULL)
{
priv->window = NULL;
}
else
{
+ GtkWidget *parent;
GtkWidget *window;
- g_return_if_fail (GTK_IS_NOTEBOOK (GTK_WIDGET (screen)->parent));
-
window = gtk_widget_get_toplevel (GTK_WIDGET (screen)->parent);
+ if (!TERMINAL_IS_WINDOW (window))
+ return; /* FIXMEchpe */
- g_return_if_fail (window != NULL);
- g_return_if_fail (TERMINAL_IS_WINDOW (window));
-
- priv->window = TERMINAL_WINDOW (gtk_widget_get_toplevel (window));
+ priv->window = TERMINAL_WINDOW (window);
}
}
@@ -214,34 +212,6 @@
}
static void
-terminal_screen_size_request (GtkWidget *widget,
- GtkRequisition *requisition)
-{
- TerminalScreen *screen = TERMINAL_SCREEN (widget);
- TerminalScreenPrivate *priv = screen->priv;
- GtkRequisition widget_request;
-
- gtk_widget_size_request (priv->hbox, &widget_request);
-
- requisition->width = widget_request.width;
- requisition->height = widget_request.height;
-}
-
-static void
-terminal_screen_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation)
-{
- GtkWidget *child;
-
- widget->allocation = *allocation;
-
- child = GTK_BIN (widget)->child;
- g_assert (child != NULL);
-
- gtk_widget_size_allocate (child, allocation);
-}
-
-static void
terminal_screen_sync_settings (GtkSettings *settings,
GParamSpec *pspec,
TerminalScreen *screen)
@@ -284,15 +254,20 @@
G_CALLBACK (terminal_screen_sync_settings), widget);
}
-static void
-terminal_screen_grab_focus (GtkWidget *widget)
+#ifdef DEBUG_GEOMETRY
+
+static void size_request (GtkWidget *widget, GtkRequisition *req)
{
- TerminalScreen *screen = TERMINAL_SCREEN (widget);
- TerminalScreenPrivate *priv = screen->priv;
+ g_print ("Screen %p size-request %d : %d\n", widget, req->width, req->height);
+}
- gtk_widget_grab_focus (priv->term);
+static void size_allocate (GtkWidget *widget, GtkAllocation *allocation)
+{
+ g_print ("Screen %p size-alloc %d : %d at (%d, %d)\n", widget, allocation->width, allocation->height, allocation->x, allocation->y);
}
+#endif
+
static void
terminal_screen_init (TerminalScreen *screen)
{
@@ -307,7 +282,8 @@
priv->recheck_working_dir_idle = 0;
- priv->term = terminal_widget_new ();
+ priv->term = GTK_WIDGET (screen);
+ terminal_widget_set_implementation (priv->term);
priv->font_scale = PANGO_SCALE_MEDIUM;
@@ -369,40 +345,26 @@
G_CALLBACK (terminal_screen_widget_title_changed),
screen);
- terminal_widget_connect_icon_title_changed (priv->term,
- G_CALLBACK (terminal_screen_widget_icon_title_changed),
- screen);
+ g_signal_connect (screen, "icon-title-changed",
+ G_CALLBACK (terminal_screen_widget_icon_title_changed),
+ screen);
terminal_widget_connect_child_died (priv->term,
G_CALLBACK (terminal_screen_widget_child_died),
screen);
- terminal_widget_connect_selection_changed (priv->term,
- G_CALLBACK (terminal_screen_widget_selection_changed),
- screen);
-
- terminal_widget_connect_encoding_changed (priv->term,
- G_CALLBACK (terminal_screen_widget_encoding_changed),
- screen);
-
connect_monospace_font_change (screen);
- priv->scrollbar = gtk_vscrollbar_new (NULL);
-
- priv->hbox = gtk_hbox_new (FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (priv->hbox), GTK_WIDGET (priv->term), TRUE, TRUE, 0);
-
- gtk_range_set_adjustment (GTK_RANGE (priv->scrollbar),
- terminal_widget_get_scroll_adjustment (priv->term));
-
- gtk_container_add (GTK_CONTAINER (screen), GTK_WIDGET (priv->hbox));
-
- gtk_widget_show_all (priv->hbox);
-
g_signal_connect (G_OBJECT (screen), "parent-set",
G_CALLBACK (parent_set_callback),
NULL);
+
+#ifdef DEBUG_GEOMETRY
+ g_signal_connect_after (screen, "size-request", G_CALLBACK (size_request), NULL);
+ g_signal_connect_after (screen, "size-allocate", G_CALLBACK (size_allocate), NULL);
+#endif
+
+ gtk_widget_show (GTK_WIDGET (screen)); /* FIXMEchpe remove this */
}
static void
@@ -434,11 +396,7 @@
object_class->finalize = terminal_screen_finalize;
object_class->get_property = terminal_screen_get_property;
- widget_class->size_allocate = terminal_screen_size_allocate;
widget_class->screen_changed = terminal_screen_screen_changed;
- widget_class->size_request = terminal_screen_size_request;
- widget_class->map = terminal_screen_map;
- widget_class->grab_focus = terminal_screen_grab_focus;
signals[PROFILE_SET] =
g_signal_new (I_("profile_set"),
@@ -449,38 +407,11 @@
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
- signals[ICON_TITLE_CHANGED] =
- g_signal_new (I_("icon_title_changed"),
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (TerminalScreenClass, icon_title_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- signals[SELECTION_CHANGED] =
- g_signal_new (I_("selection_changed"),
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (TerminalScreenClass, selection_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- signals[ENCODING_CHANGED] =
- g_signal_new (I_("encoding_changed"),
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (TerminalScreenClass, encoding_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
signals[SHOW_POPUP_MENU] =
g_signal_new (I_("show-popup-menu"),
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (TerminalScreenClass, encoding_changed),
+ G_STRUCT_OFFSET (TerminalScreenClass, show_popup_menu),
NULL, NULL,
g_cclosure_marshal_VOID__POINTER,
G_TYPE_NONE,
@@ -554,19 +485,6 @@
return g_object_new (TERMINAL_TYPE_SCREEN, NULL);
}
-static void
-terminal_screen_map (GtkWidget *widget)
-{
- GtkWidget *child;
-
- g_assert (GTK_WIDGET_REALIZED (widget));
-
- child = GTK_BIN (widget)->child;
- g_assert (child != NULL);
-
- GTK_WIDGET_CLASS (terminal_screen_parent_class)->map (widget);
-}
-
TerminalWindow*
terminal_screen_get_window (TerminalScreen *screen)
{
@@ -808,8 +726,12 @@
{
TerminalScreenPrivate *priv = screen->priv;
+ cook_title (screen, priv->raw_icon_title, &priv->cooked_icon_title);
+#if 0
+ /* FIXMEchpe */
if (cook_title (screen, priv->raw_icon_title, &priv->cooked_icon_title))
g_signal_emit (G_OBJECT (screen), signals[ICON_TITLE_CHANGED], 0);
+#endif
}
static void
@@ -1747,20 +1669,6 @@
}
static void
-terminal_screen_widget_selection_changed (GtkWidget *term,
- TerminalScreen *screen)
-{
- g_signal_emit (G_OBJECT (screen), signals[SELECTION_CHANGED], 0);
-}
-
-static void
-terminal_screen_widget_encoding_changed (GtkWidget *term,
- TerminalScreen *screen)
-{
- g_signal_emit (G_OBJECT (screen), signals[ENCODING_CHANGED], 0);
-}
-
-static void
title_entry_changed (GtkWidget *entry,
TerminalScreen *screen)
{
@@ -2249,49 +2157,44 @@
GDK_ACTION_COPY | GDK_ACTION_MOVE);
}
+/* FIXMEchpe move this to TerminalWindow! */
void
terminal_screen_update_scrollbar (TerminalScreen *screen)
{
TerminalScreenPrivate *priv = screen->priv;
TerminalProfile *profile;
+ GtkWidget *parent;
+ GtkScrolledWindow *scrolled_window;
+ GtkPolicyType policy = GTK_POLICY_ALWAYS;
+ GtkCornerType corner = GTK_CORNER_TOP_LEFT;
profile = terminal_screen_get_profile (screen);
if (profile == NULL)
return;
-
- g_object_ref (G_OBJECT (priv->scrollbar));
- if (priv->scrollbar->parent)
- {
- gtk_container_remove (GTK_CONTAINER (priv->hbox),
- priv->scrollbar);
- }
-
+ parent = GTK_WIDGET (screen)->parent;
+ if (!parent)
+ return;
+
switch (terminal_profile_get_scrollbar_position (profile))
{
case TERMINAL_SCROLLBAR_HIDDEN:
- gtk_widget_hide (priv->scrollbar);
- /* pack just to hold refcount */
- gtk_box_pack_end (GTK_BOX (priv->hbox),
- priv->scrollbar, FALSE, FALSE, 0);
+ policy = GTK_POLICY_NEVER;
break;
case TERMINAL_SCROLLBAR_RIGHT:
- gtk_box_pack_end (GTK_BOX (priv->hbox),
- priv->scrollbar, FALSE, FALSE, 0);
- gtk_box_reorder_child (GTK_BOX (priv->hbox), priv->scrollbar, -1);
- gtk_widget_show (priv->scrollbar);
+ policy = GTK_POLICY_ALWAYS;
+ corner = GTK_CORNER_TOP_LEFT;
break;
case TERMINAL_SCROLLBAR_LEFT:
- gtk_box_pack_start (GTK_BOX (priv->hbox),
- priv->scrollbar, FALSE, FALSE, 0);
- gtk_box_reorder_child (GTK_BOX (priv->hbox), priv->scrollbar, 0);
- gtk_widget_show (priv->scrollbar);
+ policy = GTK_POLICY_ALWAYS;
+ corner = GTK_CORNER_TOP_RIGHT;
break;
default:
g_assert_not_reached ();
break;
}
- g_object_unref (G_OBJECT (priv->scrollbar));
+ terminal_screen_container_set_placement (parent, corner);
+ terminal_screen_container_set_policy (parent, GTK_POLICY_NEVER, policy);
}
Modified: trunk/src/terminal-screen.h
==============================================================================
--- trunk/src/terminal-screen.h (original)
+++ trunk/src/terminal-screen.h Thu May 29 19:34:50 2008
@@ -22,7 +22,7 @@
#ifndef TERMINAL_SCREEN_H
#define TERMINAL_SCREEN_H
-#include <gtk/gtkbin.h>
+#include <vte/vte.h>
#include "terminal-profile.h"
@@ -45,19 +45,16 @@
struct _TerminalScreen
{
- GtkBin parent_instance;
+ VteTerminal parent_instance;
TerminalScreenPrivate *priv;
};
struct _TerminalScreenClass
{
- GtkBinClass parent_class;
+ VteTerminalClass parent_class;
void (* profile_set) (TerminalScreen *screen);
- void (* icon_title_changed) (TerminalScreen *screen);
- void (* selection_changed) (TerminalScreen *screen);
- void (* encoding_changed) (TerminalScreen *screen);
void (* show_popup_menu) (TerminalScreen *screen,
TerminalScreenPopupInfo *info);
};
Modified: trunk/src/terminal-tabs-menu.c
==============================================================================
--- trunk/src/terminal-tabs-menu.c (original)
+++ trunk/src/terminal-tabs-menu.c Thu May 29 19:34:50 2008
@@ -24,6 +24,7 @@
#include "terminal-tabs-menu.h"
#include "terminal-screen.h"
+#include "terminal-screen-container.h"
#include "terminal-intl.h"
#include <gtk/gtklabel.h>
@@ -185,7 +186,7 @@
static void
notebook_page_added_cb (GtkNotebook *notebook,
- TerminalScreen *screen,
+ GtkWidget *container,
guint position,
TerminalTabsMenu *menu)
{
@@ -193,6 +194,9 @@
GtkAction *action;
char verb[ACTION_VERB_FORMAT_LENGTH];
GSList *group;
+ TerminalScreen *screen;
+
+ screen = terminal_screen_container_get_screen (container);
g_snprintf (verb, sizeof (verb), ACTION_VERB_FORMAT, allocate_tab_id ());
@@ -230,12 +234,15 @@
static void
notebook_page_removed_cb (GtkNotebook *notebook,
- TerminalScreen *screen,
+ GtkWidget *container,
guint position,
TerminalTabsMenu *menu)
{
TerminalTabsMenuPrivate *priv = menu->priv;
GtkAction *action;
+ TerminalScreen *screen;
+
+ screen = terminal_screen_container_get_screen (container);
action = g_object_get_data (G_OBJECT (screen), DATA_KEY);
g_return_if_fail (action != NULL);
@@ -256,7 +263,7 @@
static void
notebook_page_reordered_cb (GtkNotebook *notebook,
- TerminalScreen *screen,
+ GtkBin *bin,
guint position,
TerminalTabsMenu *menu)
{
@@ -480,7 +487,10 @@
for (l = tabs; l != NULL; l = l->next)
{
- action = g_object_get_data (G_OBJECT (l->data), DATA_KEY);
+ GtkWidget *container = l->data;
+ GObject *screen = G_OBJECT (terminal_screen_container_get_screen (container));
+
+ action = g_object_get_data (screen, DATA_KEY);
g_return_if_fail (action != NULL);
verb = gtk_action_get_name (action);
Modified: trunk/src/terminal-widget-vte.c
==============================================================================
--- trunk/src/terminal-widget-vte.c (original)
+++ trunk/src/terminal-widget-vte.c Thu May 29 19:34:50 2008
@@ -60,14 +60,12 @@
g_free (vte);
}
-GtkWidget *
-terminal_widget_new (void)
+/* FIXMEchpe: to be removed later */
+void
+terminal_widget_set_implementation (GtkWidget *terminal)
{
- GtkWidget *terminal;
VteData *data;
- terminal = vte_terminal_new ();
-
vte_terminal_set_mouse_autohide(VTE_TERMINAL(terminal), TRUE);
data = g_new0 (VteData, 1);
@@ -77,8 +75,6 @@
g_object_set_data_full (G_OBJECT (terminal), "terminal-widget-data",
data, free_vte_data);
-
- return terminal;
}
void
@@ -465,23 +461,6 @@
}
void
-terminal_widget_connect_icon_title_changed (GtkWidget *widget,
- GCallback callback,
- void *data)
-{
- g_signal_connect (widget, "icon_title_changed",
- G_CALLBACK (callback), data);
-}
-
-void
-terminal_widget_disconnect_icon_title_changed (GtkWidget *widget,
- GCallback callback,
- void *data)
-{
- g_signal_handlers_disconnect_by_func (widget, callback, data);
-}
-
-void
terminal_widget_connect_child_died (GtkWidget *widget,
GCallback callback,
void *data)
@@ -498,40 +477,6 @@
g_signal_handlers_disconnect_by_func (widget, callback, data);
}
-void
-terminal_widget_connect_selection_changed (GtkWidget *widget,
- GCallback callback,
- void *data)
-{
- g_signal_connect (widget, "selection-changed",
- G_CALLBACK (callback), data);
-}
-
-void
-terminal_widget_disconnect_selection_changed (GtkWidget *widget,
- GCallback callback,
- void *data)
-{
- g_signal_handlers_disconnect_by_func (widget, callback, data);
-}
-
-void
-terminal_widget_connect_encoding_changed (GtkWidget *widget,
- GCallback callback,
- void *data)
-{
- g_signal_connect (widget, "encoding-changed",
- G_CALLBACK (callback), data);
-}
-
-void
-terminal_widget_disconnect_encoding_changed (GtkWidget *widget,
- GCallback callback,
- void *data)
-{
- g_signal_handlers_disconnect_by_func (widget, callback, data);
-}
-
const char*
terminal_widget_get_title (GtkWidget *widget)
{
Modified: trunk/src/terminal-widget.h
==============================================================================
--- trunk/src/terminal-widget.h (original)
+++ trunk/src/terminal-widget.h Thu May 29 19:34:50 2008
@@ -37,7 +37,7 @@
*
*/
-GtkWidget* terminal_widget_new (void);
+void terminal_widget_set_implementation (GtkWidget *widget);
void terminal_widget_set_size (GtkWidget *widget,
int width_chars,
int height_chars);
@@ -116,30 +116,12 @@
void terminal_widget_disconnect_title_changed (GtkWidget *widget,
GCallback callback,
void *data);
-void terminal_widget_connect_icon_title_changed (GtkWidget *widget,
- GCallback callback,
- void *data);
-void terminal_widget_disconnect_icon_title_changed (GtkWidget *widget,
- GCallback callback,
- void *data);
void terminal_widget_connect_child_died (GtkWidget *widget,
GCallback callback,
void *data);
void terminal_widget_disconnect_child_died (GtkWidget *widget,
GCallback callback,
void *data);
-void terminal_widget_connect_selection_changed (GtkWidget *widget,
- GCallback callback,
- void *data);
-void terminal_widget_disconnect_selection_changed (GtkWidget *widget,
- GCallback callback,
- void *data);
-void terminal_widget_connect_encoding_changed (GtkWidget *widget,
- GCallback callback,
- void *data);
-void terminal_widget_disconnect_encoding_changed (GtkWidget *widget,
- GCallback callback,
- void *data);
const char* terminal_widget_get_title (GtkWidget *widget);
const char* terminal_widget_get_icon_title (GtkWidget *widget);
Modified: trunk/src/terminal-window.c
==============================================================================
--- trunk/src/terminal-window.c (original)
+++ trunk/src/terminal-window.c Thu May 29 19:34:50 2008
@@ -26,6 +26,7 @@
#include "terminal-accels.h"
#include "terminal-widget.h"
#include "terminal-window.h"
+#include "terminal-screen-container.h"
#include "terminal-tabs-menu.h"
#include "terminal.h"
#include "encoding.h"
@@ -109,11 +110,11 @@
guint page_num,
TerminalWindow *window);
static void notebook_page_added_callback (GtkWidget *notebook,
- TerminalScreen *screen,
+ GtkWidget *container,
guint page_num,
TerminalWindow *window);
static void notebook_page_removed_callback (GtkWidget *notebook,
- TerminalScreen *screen,
+ GtkWidget *container,
guint page_num,
TerminalWindow *window);
@@ -1559,13 +1560,13 @@
static void
close_button_clicked_cb (GtkWidget *widget,
- GtkWidget *screen)
+ GtkWidget *screen_container)
{
GtkWidget *notebook;
guint page_num;
- notebook = gtk_widget_get_parent (GTK_WIDGET (screen));
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (notebook), screen);
+ notebook = gtk_widget_get_parent (screen_container);
+ page_num = gtk_notebook_page_num (GTK_NOTEBOOK (notebook), screen_container);
gtk_notebook_remove_page (GTK_NOTEBOOK (notebook), page_num);
}
@@ -1578,7 +1579,7 @@
const char *title;
title = terminal_screen_get_title (screen);
-
+g_print ("sync tab label %p title %s\n", screen, title);
hbox = gtk_widget_get_parent (label);
gtk_label_set_text (GTK_LABEL (label), title);
@@ -1599,7 +1600,7 @@
}
static GtkWidget *
-contruct_tab_label (TerminalWindow *window, TerminalScreen *screen)
+construct_tab_label (TerminalWindow *window, TerminalScreen *screen, GtkWidget *screen_container)
{
GtkWidget *hbox, *label, *close_button, *image;
@@ -1629,7 +1630,7 @@
G_CALLBACK (sync_tab_label), label);
g_signal_connect (close_button, "clicked",
- G_CALLBACK (close_button_clicked_cb), screen);
+ G_CALLBACK (close_button_clicked_cb), screen_container);
g_signal_connect (hbox, "style-set",
G_CALLBACK (tab_label_style_set_cb), close_button);
@@ -1646,38 +1647,40 @@
{
TerminalWindowPrivate *priv = window->priv;
TerminalWindow *old;
- GtkWidget *tab_label;
+ GtkWidget *screen_container, *tab_label;
old = terminal_screen_get_window (screen);
if (old == window)
return;
- g_object_ref (G_OBJECT (screen)); /* make our own new refcount */
+ g_object_ref_sink (screen); /* FIXMEchpe this leaks!!!! */
if (old)
terminal_window_remove_screen (old, screen);
- terminal_screen_set_window (screen, window);
+ screen_container = terminal_screen_container_new (screen);
+ gtk_widget_show (screen_container);
- gtk_widget_show_all (GTK_WIDGET (screen));
+ // FIXMEchpe remove this once the parent-set handler in TerminalScreen works
+ terminal_screen_set_window (screen, window);
update_tab_visibility (window, +1);
- tab_label = contruct_tab_label (window, screen);
+ tab_label = construct_tab_label (window, screen, screen_container);
gtk_notebook_insert_page (GTK_NOTEBOOK (priv->notebook),
- GTK_WIDGET (screen),
+ screen_container,
tab_label,
position);
gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (priv->notebook),
- GTK_WIDGET (screen),
+ screen_container,
TRUE, TRUE, GTK_PACK_START);
gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (priv->notebook),
- GTK_WIDGET (screen),
+ screen_container,
TRUE);
gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (priv->notebook),
- GTK_WIDGET (screen),
+ screen_container,
TRUE);
}
@@ -1686,13 +1689,17 @@
TerminalScreen *screen)
{
TerminalWindowPrivate *priv = window->priv;
+ GtkWidget *scrolled_window;
guint num_page;
g_return_if_fail (terminal_screen_get_window (screen) == window);
update_tab_visibility (window, -1);
- num_page = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), GTK_WIDGET (screen));
+ scrolled_window = GTK_WIDGET (screen)->parent;
+ g_return_if_fail (scrolled_window != NULL);
+
+ num_page = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), scrolled_window);
gtk_notebook_remove_page (GTK_NOTEBOOK (priv->notebook), num_page);
}
@@ -1789,6 +1796,7 @@
app = gtk_widget_get_toplevel (widget);
g_assert (app != NULL);
+ g_print ("toplevel type %s\n", G_OBJECT_TYPE_NAME (app));
gtk_widget_size_request (app, &toplevel_request);
gtk_widget_size_request (widget, &widget_request);
@@ -1849,7 +1857,7 @@
{
GtkWidget *old_widget;
old_widget = terminal_screen_get_widget (priv->active_term);
- gtk_widget_hide (old_widget);
+ gtk_widget_hide (old_widget); /* FIXMEchpe */
}
widget = terminal_screen_get_widget (screen);
@@ -1879,7 +1887,8 @@
gdk_window_set_icon_name (GTK_WIDGET (window)->window, terminal_screen_get_icon_title (screen));
gtk_window_set_title (GTK_WINDOW (window), terminal_screen_get_title (screen));
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), GTK_WIDGET (screen));
+ /* FIXMEchpe this is highly suspect code, called from below notebook_page_selected_callback!!! */
+ page_num = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), GTK_WIDGET (screen)->parent);
gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), page_num);
/* set size of window to current grid size */
@@ -1925,9 +1934,7 @@
page_widget = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook),
page_num);
- g_assert (page_widget);
-
- screen = TERMINAL_SCREEN (page_widget);
+ screen = terminal_screen_container_get_screen (page_widget);
g_assert (screen);
@@ -1941,13 +1948,16 @@
static void
notebook_page_added_callback (GtkWidget *notebook,
- TerminalScreen *screen,
+ GtkWidget *container,
guint page_num,
TerminalWindow *window)
{
TerminalWindowPrivate *priv = window->priv;
+ TerminalScreen *screen;
GtkWidget *term;
+ screen = terminal_screen_container_get_screen (container);
+
terminal_screen_set_window (screen, window);
priv->terms++;
@@ -2018,16 +2028,19 @@
static void
notebook_page_removed_callback (GtkWidget *notebook,
- TerminalScreen *screen,
+ GtkWidget *container,
guint page_num,
TerminalWindow *window)
{
TerminalWindowPrivate *priv = window->priv;
+ TerminalScreen *screen;
int pages;
if (priv->disposed)
return;
+ screen = terminal_screen_container_get_screen (container);
+
g_signal_handlers_disconnect_by_func (G_OBJECT (screen),
G_CALLBACK (profile_set_callback),
window);
@@ -2640,12 +2653,14 @@
TerminalWindowPrivate *priv = window->priv;
GtkNotebook *notebook = GTK_NOTEBOOK (priv->notebook);
gint page_num;
- GtkWidget *page;
+ GtkWidget *page;
+ TerminalScreen *screen;
page_num = gtk_notebook_get_current_page (notebook);
page = gtk_notebook_get_nth_page (notebook, page_num);
-
- detach_tab (TERMINAL_SCREEN (page), window);
+
+ screen = terminal_screen_container_get_screen (page);
+ detach_tab (screen, window);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]