[Kazehakase-devel 1894] ロケーションバーの選択文字列の扱い

Back to archive index

Kouhei Sutou kou****@cozmi*****
2005年 2月 8日 (火) 02:28:20 JST


須藤です.

https://sourceforge.jp/tracker/?func=detail&atid=1532&aid=5401&group_id=388
のやつです.

MozillaやFirefoxではロケーションバーのテキストを選択してから
違うタブに移動しても真ん中クリックでタブを移動する前に選択し
てあったテキストを張り付けることができます.が,風博士ではで
きません.テキストがクリアされます.

私は「テキストを選択」→「新しいタブを開く(ここでタブを移動
している)」→「真ん中クリック」という動作を勝手にやってしま
うのでこの挙動はストレスが溜っていました.

ということで,MozillaやFirefoxと同じ挙動にするパッチです.


-------------- next part --------------
Index: src/kz-window.c
===================================================================
RCS file: /cvsroot/kazehakase/kazehakase/src/kz-window.c,v
retrieving revision 1.120.2.1
diff -u -p -r1.120.2.1 kz-window.c
--- src/kz-window.c	6 Feb 2005 11:24:15 -0000	1.120.2.1
+++ src/kz-window.c	7 Feb 2005 17:22:49 -0000
@@ -209,6 +209,9 @@ static void     cb_smartbookmark_reorder
 static void     cb_menu_merge_add_widget      (GtkUIManager    *merge,
 					       GtkWidget       *widget,
 					       GtkBox          *box);
+static void     cb_clipboard_get_text         (GtkClipboard *clipboard,
+					       const gchar *text,
+					       gpointer data);
 static void     cb_notebook_switch_page       (GtkNotebook     *notebook,
 					       GtkNotebookPage *page,
 					       guint            page_num,
@@ -2303,6 +2306,14 @@ idle_focus_location_entry(gpointer data)
 
 
 static void
+cb_clipboard_get_text(GtkClipboard *clipboard, const gchar *text, gpointer data)
+{
+	char **received_text = data;
+	*received_text = g_strdup(text);
+}
+
+
+static void
 cb_notebook_switch_page (GtkNotebook *notebook, GtkNotebookPage *page,
 			 guint page_num, KzWindow *kz)
 {
@@ -2335,11 +2346,26 @@ cb_notebook_switch_page (GtkNotebook *no
 	action = gtk_action_group_get_action(kz->actions, "LocationEntry");
 	if (KZ_IS_ENTRY_ACTION(action))
 	{
+		GtkClipboard *clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
+		GObject *owner = gtk_clipboard_get_owner(clipboard);
+		gchar *text = NULL;
+		if (GTK_IS_ENTRY(owner)) {
+			gtk_clipboard_request_text(clipboard,
+						   cb_clipboard_get_text,
+						   (gpointer)&text);
+		}
 		if (location)
 			kz_entry_action_set_text(KZ_ENTRY_ACTION(action),
 						  location);
 		else
 			kz_entry_action_set_text(KZ_ENTRY_ACTION(action), "");
+
+		if (text) {
+			gtk_clipboard_set_text(clipboard,
+					       text,
+					       g_utf8_strlen(text, -1));
+			g_free(text);
+		}
 	}
 	
 	action = gtk_action_group_get_action(kz->actions, "Zoom");


Kazehakase-devel メーリングリストの案内
Back to archive index