Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2015
395
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.38 KB | None | 0 0
  1. --- ./src/terminal-notebook.c.orig
  2. +++ ./src/terminal-notebook.c
  3. @@ -45,18 +45,6 @@
  4. /* helper functions */
  5.  
  6. static void
  7. -update_tab_visibility (GtkNotebook *notebook,
  8. - int change)
  9. -{
  10. - gboolean show_tabs;
  11. - guint num;
  12. -
  13. - num = gtk_notebook_get_n_pages (notebook);
  14. - show_tabs = (num + change) > 1;
  15. - gtk_notebook_set_show_tabs (notebook, show_tabs);
  16. -}
  17. -
  18. -static void
  19. close_button_clicked_cb (TerminalTabLabel *tab_label,
  20. gpointer user_data)
  21. {
  22. @@ -92,8 +80,6 @@
  23. screen_container = terminal_screen_container_new (screen);
  24. gtk_widget_show (screen_container);
  25.  
  26. - update_tab_visibility (gtk_notebook, +1);
  27. -
  28. tab_label = terminal_tab_label_new (screen);
  29. g_signal_connect (tab_label, "close-button-clicked",
  30. G_CALLBACK (close_button_clicked_cb), NULL);
  31. @@ -120,8 +106,6 @@
  32.  
  33. g_warn_if_fail (gtk_widget_is_ancestor (GTK_WIDGET (screen), GTK_WIDGET (notebook)));
  34.  
  35. - update_tab_visibility (GTK_NOTEBOOK (notebook), -1);
  36. -
  37. screen_container = terminal_screen_container_get_from_screen (screen);
  38. gtk_container_remove (GTK_CONTAINER (notebook),
  39. GTK_WIDGET (screen_container));
  40. @@ -283,7 +267,6 @@
  41. if (page_added)
  42. page_added (notebook, child, page_num);
  43.  
  44. - update_tab_visibility (notebook, 0);
  45. g_signal_emit_by_name (notebook, "screen-added",
  46. terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (child)));
  47. }
  48. @@ -299,7 +282,6 @@
  49. if (page_removed)
  50. page_removed (notebook, child, page_num);
  51.  
  52. - update_tab_visibility (notebook, 0);
  53. g_signal_emit_by_name (notebook, "screen-removed",
  54. terminal_screen_container_get_screen (TERMINAL_SCREEN_CONTAINER (child)));
  55. }
  56. @@ -420,7 +402,7 @@
  57.  
  58. G_OBJECT_CLASS (terminal_notebook_parent_class)->constructed (object);
  59.  
  60. - gtk_notebook_set_show_tabs (notebook, FALSE);
  61. + gtk_notebook_set_show_tabs (notebook, TRUE);
  62. gtk_notebook_set_scrollable (notebook, TRUE);
  63. gtk_notebook_set_show_border (notebook, FALSE);
  64. gtk_notebook_set_group_name (notebook, I_("gnome-terminal-window"));
  65. --- ./src/terminal-window.c.orig
  66. +++ ./src/terminal-window.c
  67. @@ -87,6 +87,12 @@
  68.  
  69. /* Workaround until gtk+ bug #535557 is fixed */
  70. guint icon_title_set : 1;
  71. +
  72. + guint drag_possible : 1;
  73. +
  74. + gint button_press_x;
  75. + gint button_press_y;
  76. + guint32 button_press_time;
  77. };
  78.  
  79. #define PROFILE_DATA_KEY "GT::Profile"
  80. @@ -2331,6 +2337,104 @@
  81. terminal_window_update_encoding_menu (window);
  82. }
  83.  
  84. +static inline gboolean
  85. +in_double_click_range (GtkWidget *widget,
  86. + GdkEventButton *event)
  87. +{
  88. + TerminalWindowPrivate *priv = TERMINAL_WINDOW (widget)->priv;
  89. + gint double_click_time;
  90. + gint double_click_distance;
  91. +
  92. + g_object_get (gtk_widget_get_settings (widget),
  93. + "gtk-double-click-time", &double_click_time,
  94. + "gtk-double-click-distance", &double_click_distance,
  95. + NULL);
  96. +
  97. + if (event->time < priv->button_press_time + double_click_time &&
  98. + ABS (event->x_root - priv->button_press_x) <= double_click_distance &&
  99. + ABS (event->y_root - priv->button_press_y) <= double_click_distance)
  100. + return TRUE;
  101. +
  102. + return FALSE;
  103. +}
  104. +
  105. +static void
  106. +_gtk_window_toggle_maximized (TerminalWindow *window)
  107. +{
  108. + if (gtk_window_is_maximized(GTK_WINDOW(window)))
  109. + gtk_window_unmaximize (GTK_WINDOW(window));
  110. + else
  111. + gtk_window_maximize (GTK_WINDOW(window));
  112. +}
  113. +
  114. +static gint
  115. +action_box_motion_notify_event (GtkWidget *widget,
  116. + GdkEventMotion *event,
  117. + gpointer user_data)
  118. +{
  119. + TerminalWindow *window = TERMINAL_WINDOW(user_data);
  120. + TerminalWindowPrivate *priv = TERMINAL_WINDOW (window)->priv;
  121. +
  122. + if (!priv->drag_possible)
  123. + return FALSE;
  124. +
  125. + if (!in_double_click_range (GTK_WIDGET(window), (GdkEventButton *)event))
  126. + {
  127. + gdk_window_begin_move_drag_for_device (gtk_widget_get_window (GTK_WIDGET(window)),
  128. + gdk_event_get_device ((GdkEvent *)event),
  129. + GDK_BUTTON_PRIMARY,
  130. + event->x_root,
  131. + event->y_root,
  132. + event->time);
  133. + priv->drag_possible = FALSE;
  134. + return TRUE;
  135. + }
  136. +
  137. + return FALSE;
  138. +}
  139. +
  140. +static gint
  141. +action_box_button_release_event (GtkWidget *widget,
  142. + GdkEventButton *event,
  143. + gpointer user_data)
  144. +{
  145. + TerminalWindow *window = TERMINAL_WINDOW(user_data);
  146. + TerminalWindowPrivate *priv = TERMINAL_WINDOW (window)->priv;
  147. +
  148. + priv->drag_possible = FALSE;
  149. +
  150. + return FALSE;
  151. +}
  152. +
  153. +
  154. +static gint
  155. +action_box_button_press_event (GtkWidget *widget,
  156. + GdkEventButton *event,
  157. + gpointer user_data)
  158. +{
  159. + TerminalWindow *window = TERMINAL_WINDOW(user_data);
  160. + TerminalWindowPrivate *priv = TERMINAL_WINDOW (window)->priv;
  161. + if (event->type != GDK_BUTTON_PRESS)
  162. + return FALSE;
  163. + if (event->button == GDK_BUTTON_PRIMARY)
  164. + {
  165. + if (in_double_click_range ( GTK_WIDGET(window), event))
  166. + {
  167. + _gtk_window_toggle_maximized (window);
  168. + return TRUE;
  169. + }
  170. + else
  171. + {
  172. + priv->drag_possible = TRUE;
  173. + priv->button_press_x = event->x_root;
  174. + priv->button_press_y = event->y_root;
  175. + priv->button_press_time = event->time;
  176. + return TRUE;
  177. + }
  178. + }
  179. + return FALSE;
  180. +}
  181. +
  182. static void
  183. terminal_window_init (TerminalWindow *window)
  184. {
  185. @@ -2616,6 +2720,66 @@
  186. gtk_box_pack_end (GTK_BOX (main_vbox), GTK_WIDGET (priv->mdi_container), TRUE, TRUE, 0);
  187. gtk_widget_show (GTK_WIDGET (priv->mdi_container));
  188.  
  189. + /* Create headerbar */
  190. + {
  191. + GtkWidget *headerbar,*eb, *action_box,*close_button;
  192. + GtkCssProvider *css_p;
  193. + GError *err = NULL;
  194. + gchar css_d[] =
  195. +".gnome-terminal-header-bar-ex {\n"
  196. +" border-bottom:none;\n"
  197. +" padding: 6px 12px 0px 12px;\n"
  198. +"}\n"
  199. +"\n"
  200. +".gnome-terminal-action-box {\n"
  201. +" padding: 6px 12px 0px 300px;\n"
  202. +" border:none;\n"
  203. +" box-shadow:inset 0 1px alpha(black,0.03),inset 0 2px alpha(black,0.03),inset 0 1px alpha(black,0.03);\n"
  204. +" background-color: @theme_bg_color;\n"
  205. +"}\n"
  206. +"\n"
  207. +".gnome-terminal-action-box:backdrop {\n"
  208. +" box-shadow:none;\n"
  209. +" background-color: @theme_unfocused_bg_color;\n"
  210. +"}\n"
  211. +"\n"
  212. +".gnome-terminal-notebook.notebook.header,\n"
  213. +".gnome-terminal-notebook.notebook.header:backdrop {\n"
  214. +" background-color:transparent;\n"
  215. +" box-shadow:inset 0 1px alpha(black,0.03),inset 0 2px alpha(black,0.03),inset 0 1px alpha(black,0.03);\n"
  216. +"}\n"
  217. +"\n";
  218. + css_p = gtk_css_provider_new();
  219. + gtk_css_provider_load_from_data(css_p,css_d,sizeof(css_d),&err);
  220. + headerbar = gtk_frame_new(NULL);
  221. + gtk_widget_show(headerbar);
  222. + gtk_style_context_add_provider(gtk_widget_get_style_context (headerbar),GTK_STYLE_PROVIDER(css_p),GTK_STYLE_PROVIDER_PRIORITY_USER);
  223. + gtk_style_context_add_class (gtk_widget_get_style_context (headerbar),"header-bar");
  224. + gtk_style_context_add_class (gtk_widget_get_style_context (headerbar),"gnome-terminal-header-bar-ex");
  225. + eb = gtk_event_box_new();
  226. + action_box = gtk_frame_new(NULL);
  227. + gtk_style_context_add_provider(gtk_widget_get_style_context (action_box),GTK_STYLE_PROVIDER(css_p),GTK_STYLE_PROVIDER_PRIORITY_USER);
  228. + gtk_style_context_add_class (gtk_widget_get_style_context (action_box),"gnome-terminal-action-box");
  229. + close_button = gtk_button_new_from_icon_name ("window-close-symbolic", GTK_ICON_SIZE_MENU);
  230. + gtk_widget_set_valign (close_button, GTK_ALIGN_START);
  231. + gtk_widget_set_can_focus (close_button, FALSE);
  232. + gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE);
  233. + gtk_style_context_add_class (gtk_widget_get_style_context (close_button), "titlebutton");
  234. + g_signal_connect_swapped (close_button, "clicked", G_CALLBACK (gtk_window_close), window);
  235. + gtk_container_add(GTK_CONTAINER(action_box),close_button);
  236. + gtk_container_add( GTK_CONTAINER(eb), action_box );
  237. + gtk_widget_set_events(eb,GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
  238. + g_signal_connect(eb, "button_press_event", G_CALLBACK (action_box_button_press_event), window);
  239. + g_signal_connect(eb, "button_release_event", G_CALLBACK (action_box_button_release_event), window);
  240. + g_signal_connect(eb, "motion_notify_event", G_CALLBACK (action_box_motion_notify_event), window);
  241. + gtk_widget_show_all(eb);
  242. + gtk_notebook_set_action_widget(GTK_NOTEBOOK(priv->mdi_container),eb,GTK_PACK_END);
  243. + gtk_style_context_add_provider(gtk_widget_get_style_context (GTK_WIDGET(priv->mdi_container)),GTK_STYLE_PROVIDER(css_p),GTK_STYLE_PROVIDER_PRIORITY_USER);
  244. + gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET(priv->mdi_container)),"gnome-terminal-notebook");
  245. + gtk_window_set_titlebar (GTK_WINDOW (window),headerbar);
  246. + }
  247. +
  248. +
  249. priv->old_char_width = -1;
  250. priv->old_char_height = -1;
  251. priv->old_geometry_widget = NULL;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement