Hiroyuki Ikezoe
ikezo****@users*****
Wed Jan 3 10:20:50 JST 2007
Index: kazehakase/src/kz-notebook.c
diff -u kazehakase/src/kz-notebook.c:1.1 kazehakase/src/kz-notebook.c:1.2
--- kazehakase/src/kz-notebook.c:1.1 Wed Jan 3 09:40:53 2007
+++ kazehakase/src/kz-notebook.c Wed Jan 3 10:20:50 2007
@@ -23,15 +23,43 @@
#include <gdk/gdkkeysyms.h>
#include "gtk-utils.h"
-#include "kz-download-box.h"
-#include "kz-entry.h"
+#include "kz-tab-label.h"
#include "kz-notebook.h"
+#include "kz-actions.h"
enum {
PROP_0,
PROP_KZ_WINDOW
};
+enum {
+ TARGET_KAZEHAKASE_TAB,
+ TARGET_NETSCAPE_URL,
+ TARGET_TEXT_URI_LIST,
+ TARGET_TEXT_PLAIN,
+ TARGET_STRING
+};
+
+static GtkTargetEntry url_drag_types [] =
+{
+ { "_KAZEHAKASE_TAB", 0, TARGET_KAZEHAKASE_TAB},
+ { "_NETSCAPE_URL", 0, TARGET_NETSCAPE_URL},
+ { "text/uri-list", 0, TARGET_TEXT_URI_LIST},
+ { "text/plain", 0, TARGET_TEXT_PLAIN},
+ { "STRING", 0, TARGET_STRING}
+};
+
+static struct {
+ const gchar *pos;
+ const gchar *tab_act;
+ const gchar *sidebar_act;
+} positems[] = {
+ {"top", "TabPosTop", "SidebarPosTop"},
+ {"bottom", "TabPosBottom", "SidebarPosBottom"},
+ {"left", "TabPosLeft", "SidebarPosLeft"},
+ {"right", "TabPosRight", "SidebarPosRight"},
+};
+
typedef struct _KzNotebookPrivate KzNotebookPrivate;
struct _KzNotebookPrivate
{
@@ -39,23 +67,34 @@
#define KZ_NOTEBOOK_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), KZ_TYPE_NOTEBOOK, KzNotebookPrivate))
-#define STATUS_LINK_MESSAGE "INTERNAL_LINK_MESSAGE"
-#define STATUS_GESTURE "INTERNAL_GESTURE"
-#define STATUS_SEARCH "INTERNAL_SEARCH"
-
static GObject *constructor (GType type,
guint n_props,
GObjectConstructParam *props);
-static void dispose (GObject *object);
-static void set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-static void get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
+static void dispose (GObject *object);
+static void set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+
+static gboolean scroll_event (GtkWidget *widget,
+ GdkEventScroll *event);
+
+static void drag_data_received
+ (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x, gint y,
+ GtkSelectionData *data,
+ guint info,
+ guint time);
+
+static void switch_page (GtkNotebook *notebook,
+ GtkNotebookPage *page,
+ guint page_num);
G_DEFINE_TYPE (KzNotebook, kz_notebook, GTK_TYPE_NOTEBOOK)
@@ -64,9 +103,11 @@
{
GObjectClass *gobject_class;
GtkWidgetClass *widget_class;
+ GtkNotebookClass *notebook_class;
- gobject_class = (GObjectClass *)klass;
- widget_class = (GtkWidgetClass *)klass;
+ gobject_class = (GObjectClass *)klass;
+ widget_class = (GtkWidgetClass *)klass;
+ notebook_class = (GtkNotebookClass *)klass;
/* GtkObject signals */
gobject_class->constructor = constructor;
@@ -74,6 +115,11 @@
gobject_class->set_property = set_property;
gobject_class->get_property = get_property;
+ widget_class->scroll_event = scroll_event;
+ widget_class->drag_data_received = drag_data_received;
+
+ notebook_class->switch_page = switch_page;
+
g_object_class_install_property
(gobject_class,
PROP_KZ_WINDOW,
@@ -91,10 +137,13 @@
static void
kz_notebook_init (KzNotebook *notebook)
{
- KzNotebookPrivate *priv = KZ_NOTEBOOK_GET_PRIVATE (notebook);
-
/* widgets */
notebook->kz = NULL;
+
+ gtk_drag_dest_set(GTK_WIDGET(notebook),
+ GTK_DEST_DEFAULT_ALL,
+ url_drag_types, G_N_ELEMENTS(url_drag_types),
+ GDK_ACTION_MOVE);
}
@@ -106,7 +155,6 @@
KzNotebook *notebook;
GObject *object;
GObjectClass *klass = G_OBJECT_CLASS(kz_notebook_parent_class);
- GtkWidget *widget;
object = klass->constructor(type, n_props, props);
@@ -169,7 +217,6 @@
dispose (GObject *object)
{
KzNotebook *notebook = KZ_NOTEBOOK(object);
- KzNotebookPrivate *priv = KZ_NOTEBOOK_GET_PRIVATE (notebook);
if (notebook->kz)
{
@@ -178,6 +225,112 @@
}
if (G_OBJECT_CLASS(kz_notebook_parent_class)->dispose)
- (*G_OBJECT_CLASS(kz_notebook_parent_class)->dispose) (object);
+ G_OBJECT_CLASS(kz_notebook_parent_class)->dispose(object);
+}
+
+static gboolean
+scroll_event (GtkWidget *widget, GdkEventScroll *event)
+{
+ GtkAction *action;
+ KzWindow *kz = KZ_NOTEBOOK(widget)->kz;
+
+ g_return_val_if_fail(KZ_IS_WINDOW(kz), FALSE);
+
+ switch (event->direction)
+ {
+ case GDK_SCROLL_UP:
+ case GDK_SCROLL_LEFT:
+ action = gtk_action_group_get_action(kz->actions, "PrevTab");
+ gtk_action_activate(action);
+ return TRUE;
+ break;
+ case GDK_SCROLL_DOWN:
+ case GDK_SCROLL_RIGHT:
+ action = gtk_action_group_get_action(kz->actions, "NextTab");
+ gtk_action_activate(action);
+ return TRUE;
+ break;
+ default:
+ g_warning ("Invalid scroll direction!");
+ break;
+ }
+
+ return FALSE;
+}
+
+static void
+drag_data_received (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x, gint y,
+ GtkSelectionData *data,
+ guint info,
+ guint time)
+{
+ KzWindow *kz = KZ_NOTEBOOK(widget)->kz;
+ g_return_if_fail(KZ_IS_WINDOW(kz));
+
+ switch (info)
+ {
+ case TARGET_KAZEHAKASE_TAB:
+ {
+ GtkWidget *src_widget;
+ KzWindow *src_kz;
+ KzTabLabel *src_kztab;
+
+ src_widget = gtk_drag_get_source_widget(context);
+
+ if (!KZ_IS_TAB_LABEL(src_widget)) return;
+ src_kztab = KZ_TAB_LABEL(src_widget);
+
+ src_kz = KZ_WINDOW(kz_window_get_from_tab(GTK_WIDGET(src_kztab->kzembed)));
+ if (kz == src_kz)
+ {
+ gint n;
+
+ n = gtk_notebook_get_n_pages(GTK_NOTEBOOK(kz->notebook));
+ kz_window_reorder_tab(kz, GTK_WIDGET(src_kztab->kzembed),
+ n - 1);
+ kz_actions_set_sensitive
+ (kz, KZ_EMBED(KZ_WINDOW_CURRENT_PAGE(kz)));
+ kz_actions_set_tab_sensitive
+ (kz, KZ_EMBED(KZ_WINDOW_CURRENT_PAGE(kz)));
+ }
+ else
+ {
+ kz_window_move_tab(kz, GTK_WIDGET(src_kztab->kzembed));
+ }
+
+ break;
+ }
+
+ case TARGET_NETSCAPE_URL:
+ case TARGET_TEXT_URI_LIST:
+ case TARGET_TEXT_PLAIN:
+ case TARGET_STRING:
+ {
+ gchar *string, **strings;
+
+ if (data->length < 0) return;
+ string = g_alloca (data->length + 1);
+
+ memcpy (string, data->data, data->length);
+ string[data->length] = '\0';
+
+ strings = g_strsplit(string, "\n", 2);
+ kz_window_open_new_tab(kz, strings[0]);
+ g_strfreev(strings);
+ break;
+
+ }
+ default:
+ break;
+ }
+}
+
+static void
+switch_page (GtkNotebook *notebook, GtkNotebookPage *page, guint page_num)
+{
+ if (GTK_NOTEBOOK_CLASS(kz_notebook_parent_class)->switch_page)
+ GTK_NOTEBOOK_CLASS(kz_notebook_parent_class)->switch_page(notebook, page, page_num);
}
Index: kazehakase/src/kz-window.c
diff -u kazehakase/src/kz-window.c:1.288 kazehakase/src/kz-window.c:1.289
--- kazehakase/src/kz-window.c:1.288 Wed Jan 3 09:40:53 2007
+++ kazehakase/src/kz-window.c Wed Jan 3 10:20:50 2007
@@ -106,15 +106,6 @@
TARGET_STRING
};
-static GtkTargetEntry url_drag_types [] =
-{
- { "_KAZEHAKASE_TAB", 0, TARGET_KAZEHAKASE_TAB},
- { "_NETSCAPE_URL", 0, TARGET_NETSCAPE_URL},
- { "text/uri-list", 0, TARGET_TEXT_URI_LIST},
- { "text/plain", 0, TARGET_TEXT_PLAIN},
- { "STRING", 0, TARGET_STRING}
-};
-
static struct {
const gchar *pos;
const gchar *tab_act;
@@ -213,9 +204,6 @@
static void cb_gesture_stack_motion (KzGesture *gesture,
KzGestureMotion motion,
KzWindow *kz);
-static gboolean cb_notebook_scroll_event (GtkWidget *widget,
- GdkEventScroll *event,
- KzWindow *kz);
static void cb_sidebar_map (GtkWidget *widget,
GtkToggleAction *action);
static void cb_sidebar_unmap (GtkWidget *widget,
@@ -277,16 +265,6 @@
GdkEventScroll *event,
KzEmbed *kzembed);
-/* notebook received dropped url */
-static void cb_notebook_drag_data_received (GtkWidget *widget,
- GdkDragContext *drag_context,
- gint x,
- gint y,
- GtkSelectionData *data,
- guint info,
- guint time,
- KzWindow *kz);
-
static void gtk_key_theme_changed_cb (GtkSettings *settings,
GParamSpec *pspec,
gpointer dummy);
@@ -584,16 +562,7 @@
G_CALLBACK(cb_notebook_switch_page), kz);
g_signal_connect_after(kz->notebook, "switch-page",
G_CALLBACK(cb_notebook_switch_page_after), kz);
- g_signal_connect(kz->notebook, "scroll-event",
- G_CALLBACK(cb_notebook_scroll_event), kz);
- gtk_drag_dest_set(GTK_WIDGET(kz->notebook),
- GTK_DEST_DEFAULT_ALL,
- url_drag_types, G_N_ELEMENTS (url_drag_types),
- GDK_ACTION_MOVE);
- g_signal_connect(kz->notebook, "drag-data-received",
- G_CALLBACK(cb_notebook_drag_data_received),
- kz);
gtk_paned_add2(GTK_PANED(kz->pane), kz->notebook);
gtk_widget_show(kz->notebook);
@@ -2394,14 +2363,6 @@
return FALSE;
}
-static gboolean
-cb_notebook_scroll_event (GtkWidget *widget, GdkEventScroll *event,
- KzWindow *kz)
-{
- return handle_scroll_event (kz, event->direction);
-}
-
-
static void
cb_sidebar_map (GtkWidget *widget, GtkToggleAction *action)
{
@@ -3006,75 +2967,6 @@
return retval;
}
-static void
-cb_notebook_drag_data_received (GtkWidget *widget,
- GdkDragContext *drag_context,
- gint x, gint y,
- GtkSelectionData *data,
- guint info,
- guint time,
- KzWindow *kz)
-{
- g_return_if_fail(KZ_IS_WINDOW(kz));
-
- switch (info)
- {
- case TARGET_KAZEHAKASE_TAB:
- {
- GtkWidget *src_widget;
- KzWindow *src_kz;
- KzTabLabel *src_kztab;
-
- src_widget = gtk_drag_get_source_widget(drag_context);
-
- if (!KZ_IS_TAB_LABEL(src_widget)) return;
- src_kztab = KZ_TAB_LABEL(src_widget);
-
- src_kz = KZ_WINDOW(kz_window_get_from_tab(GTK_WIDGET(src_kztab->kzembed)));
- if (kz == src_kz)
- {
- gint n;
-
- n = gtk_notebook_get_n_pages(GTK_NOTEBOOK(kz->notebook));
- kz_window_reorder_tab(kz, GTK_WIDGET(src_kztab->kzembed),
- n - 1);
- kz_actions_set_sensitive
- (kz, KZ_EMBED(KZ_WINDOW_CURRENT_PAGE(kz)));
- kz_actions_set_tab_sensitive
- (kz, KZ_EMBED(KZ_WINDOW_CURRENT_PAGE(kz)));
- }
- else
- {
- kz_window_move_tab(kz, GTK_WIDGET(src_kztab->kzembed));
- }
-
- break;
- }
-
- case TARGET_NETSCAPE_URL:
- case TARGET_TEXT_URI_LIST:
- case TARGET_TEXT_PLAIN:
- case TARGET_STRING:
- {
- gchar *string, **strings;
-
- if (data->length < 0) return;
- string = g_alloca (data->length + 1);
-
- memcpy (string, data->data, data->length);
- string[data->length] = '\0';
-
- strings = g_strsplit(string, "\n", 2);
- kz_window_open_new_tab(kz, strings[0]);
- g_strfreev(strings);
- break;
-
- }
- default:
- break;
- }
-}
-
static gboolean
cb_focus_out_event (GtkWidget *widget,
GdkEventFocus *event,