Merge lp:~holizz/sakura/sakura into lp:~dabisu/sakura/sakura

Proposed by Tom Adams
Status: Rejected
Rejected by: David Gómez
Proposed branch: lp:~holizz/sakura/sakura
Merge into: lp:~dabisu/sakura/sakura
Diff against target: None lines
To merge this branch: bzr merge lp:~holizz/sakura/sakura
Reviewer Review Type Date Requested Status
David Gómez Abstain
Review via email: mp+4500@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Tom Adams (holizz) wrote :
lp:~holizz/sakura/sakura updated
282. By Tom Adams

  * src/sakura.c:
   - Removed unused variable from sakura_concat_uris

283. By Tom Adams

  * src/sakura.c:
   - Use sakura_set_size in sakura_show_first_tab

284. By Tom Adams

  * src/sakura.c:
   - String changes

Revision history for this message
David Gómez (dabisu) wrote :

I forgot this merge request, i'm really sorry. I corrected one string that wasn't corrected yet ("Always show tab bar"). The scrollbar bug still happens so the bug is open. Adding a call to set_size in show_first_tab won't fix it.

review: Abstain

Unmerged revisions

284. By Tom Adams

  * src/sakura.c:
   - String changes

283. By Tom Adams

  * src/sakura.c:
   - Use sakura_set_size in sakura_show_first_tab

282. By Tom Adams

  * src/sakura.c:
   - Removed unused variable from sakura_concat_uris

281. By Tom Adams

  * src/sakura.c:
   - Use term's size in sakura_calculate_row_col to get new values

280. By Tom Adams

  * src/sakura.c:
   - Use sakura_set_size when toggling scrollbar via context menu too

279. By Tom Adams

  * src/sakura.c:
   - Added text/unicode target as workaround for Firefox

278. By Tom Adams

  * src/sakura.c:
   - Removed colour, background, and tab targets.

277. By Tom Adams

  * src/sakura.c:
   - Strip "file://" from URIs

276. By Tom Adams

  * src/sakura.c:
   - Remove sakura_transform_uris_to_quoted_fuse_paths

275. By Tom Adams

  * src/sakura.c:
 - Initial support for drag and drop

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/sakura.c'
2--- src/sakura.c 2009-02-03 16:23:52 +0000
3+++ src/sakura.c 2009-03-15 13:11:44 +0000
4@@ -4,6 +4,7 @@
5 *
6 * Copyright (C) 2006-2008 David Gómez <david@pleyades.net>
7 * Copyright (C) 2008 Hong Jen Yee (PCMan) <pcman.tw@gmail.com>
8+ * Copyright (C) 2009 Tom Adams <tom@holizz.com>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12@@ -199,6 +200,13 @@
13 GtkWidget *label;
14 };
15
16+enum
17+{
18+ TARGET_MOZ_URL,
19+ TARGET_NETSCAPE_URL,
20+ TARGET_UNICODE
21+};
22+
23
24 #define ICON_FILE "terminal-tango.svg"
25 #define SCROLL_LINES 4096
26@@ -263,6 +271,7 @@
27 static void sakura_show_close_button (GtkWidget *widget, void *data);
28 static void sakura_show_scrollbar(GtkWidget *, void *);
29 static void sakura_closebutton_clicked(GtkWidget *, void *);
30+static void sakura_drag_data_received (GtkWidget *, GdkDragContext *, gint, gint, GtkSelectionData *, guint, guint);
31
32 /* Misc */
33 static void sakura_error(const char *, ...);
34@@ -279,6 +288,7 @@
35 static void sakura_set_bgimage();
36 static void sakura_key_file_set_key(GKeyFile *, const gchar *, const gchar *, guint);
37 static guint sakura_key_file_get_key(GKeyFile *, const gchar *, const gchar *);
38+char * sakura_concat_uris (char **, gsize *);
39
40 static const char *option_font;
41 static const char *option_execute;
42@@ -1044,6 +1054,7 @@
43 else
44 gtk_widget_show(term->scrollbar);
45 }
46+ sakura_set_size(sakura.columns, sakura.rows);
47 }
48
49
50@@ -1135,6 +1146,175 @@
51 }
52 }
53
54+/* Paste text from DND action
55+ * Original function was from terminal-screen.c of gnome-terminal,
56+ * Copyright © 2001 Havoc Pennington
57+ * Copyright © 2007, 2008 Christian Persch
58+ * Adapted by Tom Adams */
59+static void
60+sakura_drag_data_received (GtkWidget *widget,
61+ GdkDragContext *context,
62+ gint x,
63+ gint y,
64+ GtkSelectionData *selection_data,
65+ guint info,
66+ guint time)
67+{
68+ VteTerminal *vte = VTE_TERMINAL(widget);
69+
70+ if (gtk_targets_include_uri (&selection_data->target, 1))
71+ {
72+ char **uris;
73+ char *text;
74+ gsize len;
75+
76+ uris = gtk_selection_data_get_uris (selection_data);
77+ if (!uris)
78+ return;
79+
80+ text = sakura_concat_uris (uris, &len);
81+ vte_terminal_feed_child (vte, text, len);
82+ g_free (text);
83+
84+ g_strfreev (uris);
85+ }
86+ else if (gtk_targets_include_text (&selection_data->target, 1))
87+ {
88+ char *text;
89+
90+ text = (char *) gtk_selection_data_get_text (selection_data);
91+ if (text && text[0])
92+ vte_terminal_feed_child (vte, text, strlen (text));
93+ g_free (text);
94+ }
95+ else switch (info)
96+ {
97+ case TARGET_MOZ_URL:
98+ {
99+ char *utf8_data, *newline, *text;
100+ char *uris[2];
101+ gsize len;
102+
103+ /* MOZ_URL is in UCS-2 but in format 8. BROKEN!
104+ *
105+ * The data contains the URL, a \n, then the
106+ * title of the web page.
107+ */
108+ if (selection_data->format != 8 ||
109+ selection_data->length == 0 ||
110+ (selection_data->length % 2) != 0)
111+ return;
112+
113+ utf8_data = g_utf16_to_utf8 ((const gunichar2*) selection_data->data,
114+ selection_data->length / 2,
115+ NULL, NULL, NULL);
116+ if (!utf8_data)
117+ return;
118+
119+ newline = strchr (utf8_data, '\n');
120+ if (newline)
121+ *newline = '\0';
122+
123+ uris[0] = utf8_data;
124+ uris[1] = NULL;
125+
126+ text = sakura_concat_uris (uris, &len);
127+ vte_terminal_feed_child (vte, text, len);
128+ g_free (text);
129+ g_free (uris[0]);
130+ }
131+ break;
132+
133+ case TARGET_NETSCAPE_URL:
134+ {
135+ char *utf8_data, *newline, *text;
136+ char *uris[2];
137+ gsize len;
138+
139+ /* The data contains the URL, a \n, then the
140+ * title of the web page.
141+ */
142+ if (selection_data->length < 0 || selection_data->format != 8)
143+ return;
144+
145+ utf8_data = g_strndup ((char *) selection_data->data, selection_data->length);
146+ newline = strchr (utf8_data, '\n');
147+ if (newline)
148+ *newline = '\0';
149+
150+ uris[0] = utf8_data;
151+ uris[1] = NULL;
152+
153+ text = sakura_concat_uris (uris, &len);
154+ vte_terminal_feed_child (vte, text, len);
155+ g_free (text);
156+ g_free (uris[0]);
157+ }
158+ break;
159+
160+ case TARGET_UNICODE:
161+ { /* adapted from TARGET_MOZ_URL, as a workaround for
162+ Firefox's text/plain drag source which is
163+ ISO-8859-1 encoded */
164+ char *utf8_data;
165+
166+ if (selection_data->format != 8 ||
167+ selection_data->length == 0 ||
168+ (selection_data->length % 2) != 0)
169+ return;
170+
171+ utf8_data = g_utf16_to_utf8 ((const gunichar2*) selection_data->data,
172+ selection_data->length / 2,
173+ NULL, NULL, NULL);
174+ if (!utf8_data)
175+ return;
176+
177+ vte_terminal_feed_child (vte, utf8_data, strlen(utf8_data));
178+ }
179+ break;
180+
181+ default:
182+ g_assert_not_reached ();
183+ }
184+}
185+
186+/* Original function was from terminal-util.c of gnome-terminal,
187+ * Copyright © 2001, 2002 Havoc Pennington
188+ * Copyright © 2002 Red Hat, Inc.
189+ * Copyright © 2002 Sun Microsystems
190+ * Copyright © 2003 Mariano Suarez-Alvarez
191+ * Copyright © 2008 Christian Persch
192+ * Adapted by Tom Adams */
193+char *
194+sakura_concat_uris (char **uris, gsize *length)
195+{
196+ GString *string;
197+ gsize len;
198+ guint i, j;
199+ char* uri;
200+
201+ len = 0;
202+ for (i = 0; uris[i]; ++i)
203+ len += strlen (uris[i]) + 1;
204+
205+ if (length)
206+ *length = len;
207+
208+ string = g_string_sized_new (len + 1);
209+ for (i = 0; uris[i]; ++i)
210+ {
211+ uri = uris[i];
212+ if (strncmp(uris[i], "file://", 7) == 0)
213+ {
214+ uri += 7;
215+ *length -= 7;
216+ }
217+ g_string_append (string, uri);
218+ g_string_append_c (string, ' ');
219+ }
220+
221+ return g_string_free (string, FALSE);
222+}
223
224 /* Every the window changes its size by an user action (resize, fullscreen), calculate
225 * the new values for the number of columns and rows */
226@@ -1144,6 +1324,7 @@
227 struct terminal *term;
228 gint x_padding, y_padding;
229 gint n_pages=gtk_notebook_get_n_pages(GTK_NOTEBOOK(sakura.notebook));
230+ GtkRequisition term_request;
231
232 if (n_pages==-1) return;
233
234@@ -1156,12 +1337,12 @@
235 vte_terminal_get_padding( VTE_TERMINAL(term->vte), &x_padding, &y_padding );
236 sakura.char_width = vte_terminal_get_char_width(VTE_TERMINAL(term->vte));
237 sakura.char_height = vte_terminal_get_char_height(VTE_TERMINAL(term->vte));
238+ gtk_widget_size_request (term->vte, &term_request);
239 /* Ignore resize events in sakura window is in fullscreen */
240 if (!sakura.keep_fc) {
241 /* We cannot trust in vte allocation values, they're unreliable */
242- /* FIXME: Round values properly */
243- sakura.columns = (width/sakura.char_width);
244- sakura.rows = (height/sakura.char_height);
245+ sakura.columns = (term_request.width/sakura.char_width);
246+ sakura.rows = (term_request.height/sakura.char_height);
247 sakura.keep_fc=false;
248 SAY("new columns %ld and rows %ld", sakura.columns, sakura.rows);
249 }
250@@ -1913,6 +2094,14 @@
251 gchar *label_text;
252 gchar *cwd = NULL;
253 gint w, h;
254+ const GtkTargetEntry target_table[] = {
255+ { "text/x-moz-url", 0, TARGET_MOZ_URL },
256+ { "_NETSCAPE_URL", 0, TARGET_NETSCAPE_URL },
257+ { "text/unicode", 0, TARGET_UNICODE }
258+ };
259+ GtkTargetList *target_list;
260+ GtkTargetEntry *targets;
261+ int n_targets;
262
263
264 term = g_new0( struct terminal, 1 );
265@@ -1975,6 +2164,24 @@
266
267 sakura_set_page_term(sakura, index, term );
268
269+ /* Setup DND */
270+ target_list = gtk_target_list_new (NULL, 0);
271+ gtk_target_list_add_uri_targets (target_list, 0);
272+ gtk_target_list_add_text_targets (target_list, 0);
273+ gtk_target_list_add_table (target_list, target_table, G_N_ELEMENTS (target_table));
274+
275+ targets = gtk_target_table_new_from_list (target_list, &n_targets);
276+
277+ gtk_drag_dest_set (GTK_WIDGET (term->vte),
278+ GTK_DEST_DEFAULT_MOTION |
279+ GTK_DEST_DEFAULT_HIGHLIGHT |
280+ GTK_DEST_DEFAULT_DROP,
281+ targets, n_targets,
282+ GDK_ACTION_COPY | GDK_ACTION_MOVE);
283+
284+ gtk_target_table_free (targets, n_targets);
285+ gtk_target_list_unref (target_list);
286+
287 /* vte signals */
288 g_signal_connect(G_OBJECT(term->vte), "increase-font-size", G_CALLBACK(sakura_increase_font), NULL);
289 g_signal_connect(G_OBJECT(term->vte), "decrease-font-size", G_CALLBACK(sakura_decrease_font), NULL);
290@@ -1982,6 +2189,7 @@
291 g_signal_connect(G_OBJECT(term->vte), "eof", G_CALLBACK(sakura_eof), NULL);
292 g_signal_connect(G_OBJECT(term->vte), "window-title-changed", G_CALLBACK(sakura_title_changed), NULL);
293 g_signal_connect_swapped(G_OBJECT(term->vte), "button-press-event", G_CALLBACK(sakura_button_press), sakura.menu);
294+ g_signal_connect(G_OBJECT(term->vte), "drag-data-received", G_CALLBACK(sakura_drag_data_received), NULL);
295
296 /* Notebook signals */
297 g_signal_connect(G_OBJECT(sakura.notebook), "page-removed", G_CALLBACK(sakura_page_removed), NULL);

Subscribers

People subscribed via source and target branches