Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:11.4
Terminal
Terminal-0.4.6-fix-race.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File Terminal-0.4.6-fix-race.patch of Package Terminal
--- a/terminal/terminal-screen.c +++ a/terminal/terminal-screen.c @@ -90,6 +90,7 @@ static gchar *terminal_screen_parse_title (TerminalScreen const gchar *title); static gchar **terminal_screen_get_child_environment (TerminalScreen *screen); static void terminal_screen_update_background (TerminalScreen *screen); +static void terminal_screen_update_background_fast (TerminalScreen *screen); static void terminal_screen_update_binding_backspace (TerminalScreen *screen); static void terminal_screen_update_binding_delete (TerminalScreen *screen); static void terminal_screen_update_colors (TerminalScreen *screen); @@ -141,6 +142,8 @@ struct _TerminalScreen guint session_id; + gulong background_signal_id; + GPid pid; gchar *working_directory; @@ -243,7 +246,6 @@ terminal_screen_init (TerminalScreen *screen) "signal::selection-changed", G_CALLBACK (terminal_screen_vte_selection_changed), screen, "signal::window-title-changed", G_CALLBACK (terminal_screen_vte_window_title_changed), screen, "signal::resize-window", G_CALLBACK (terminal_screen_vte_resize_window), screen, - "swapped-signal::size-allocate", G_CALLBACK (terminal_screen_timer_background), screen, "swapped-signal::style-set", G_CALLBACK (terminal_screen_update_colors), screen, NULL); gtk_box_pack_start (GTK_BOX (screen), screen->terminal, TRUE, TRUE, 0); @@ -712,6 +714,18 @@ terminal_screen_get_child_environment (TerminalScreen *screen) static void +terminal_screen_update_background_fast (TerminalScreen *screen) +{ + if (G_UNLIKELY (screen->background_timer_id == 0)) + { + screen->background_timer_id = g_idle_add_full (G_PRIORITY_LOW, terminal_screen_timer_background, + screen, terminal_screen_timer_background_destroy); + } +} + + + +static void terminal_screen_update_background (TerminalScreen *screen) { if (G_UNLIKELY (screen->background_timer_id != 0)) @@ -1222,9 +1236,25 @@ terminal_screen_timer_background (gpointer user_data) if (G_LIKELY (image != NULL)) g_object_unref (G_OBJECT (image)); g_object_unref (G_OBJECT (loader)); + + /* refresh background on size changes */ + if (screen->background_signal_id == 0) + { + screen->background_signal_id = + g_signal_connect_swapped (G_OBJECT (screen->terminal), "size-allocate", + G_CALLBACK (terminal_screen_update_background_fast), screen); + } } else { + /* stop updating on size changes */ + if (screen->background_signal_id != 0) + { + g_signal_handler_disconnect (G_OBJECT (screen->terminal), screen->background_signal_id); + screen->background_signal_id = 0; + } + + /* WARNING: the causes a resize too! */ vte_terminal_set_background_image (VTE_TERMINAL (screen->terminal), NULL); } @@ -1365,7 +1395,7 @@ terminal_screen_launch_child (TerminalScreen *screen) if (!vte_terminal_fork_command_full (VTE_TERMINAL (screen->terminal), update ? VTE_PTY_DEFAULT : VTE_PTY_NO_LASTLOG | VTE_PTY_NO_UTMP | VTE_PTY_NO_WTMP, - screen->working_directory, argv2, env, + screen->working_directory, argv2, env, spawn_flags, NULL, NULL, &screen->pid, &error))
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor