add back --geometry positioning support
was removed in 0e9e88a
,
based on https://github.com/GNOME/gtk/commit/f37a062
master-1.22
parent
966d73bdad
commit
8fdadba380
|
@ -1849,7 +1849,7 @@ terminal_app_handle_options (TerminalApp *app,
|
||||||
"[window %p] applying geometry %s\n",
|
"[window %p] applying geometry %s\n",
|
||||||
window, iw->geometry);
|
window, iw->geometry);
|
||||||
|
|
||||||
if (!terminal_window_set_size_force_grid (window,
|
if (!terminal_window_update_size_set_geometry (window,
|
||||||
terminal_window_get_active (window),
|
terminal_window_get_active (window),
|
||||||
FALSE,
|
FALSE,
|
||||||
iw->geometry))
|
iw->geometry))
|
||||||
|
|
|
@ -1112,7 +1112,7 @@ terminal_screen_change_font (TerminalScreen *screen)
|
||||||
terminal_screen_set_font (screen);
|
terminal_screen_set_font (screen);
|
||||||
|
|
||||||
window = terminal_screen_get_window (screen);
|
window = terminal_screen_get_window (screen);
|
||||||
terminal_window_set_size (window, screen, TRUE);
|
terminal_window_update_size (window, screen, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -480,13 +480,13 @@ terminal_window_XParseGeometry (const char *string,
|
||||||
|
|
||||||
if (*strind != '\0') return (0);
|
if (*strind != '\0') return (0);
|
||||||
|
|
||||||
if (x != NULL && mask & XValue)
|
if (mask & XValue)
|
||||||
*x = tempX;
|
*x = tempX;
|
||||||
if (y != NULL && mask & YValue)
|
if (mask & YValue)
|
||||||
*y = tempY;
|
*y = tempY;
|
||||||
if (width != NULL && mask & WidthValue)
|
if (mask & WidthValue)
|
||||||
*width = tempWidth;
|
*width = tempWidth;
|
||||||
if (height != NULL && mask & HeightValue)
|
if (mask & HeightValue)
|
||||||
*height = tempHeight;
|
*height = tempHeight;
|
||||||
return (mask);
|
return (mask);
|
||||||
}
|
}
|
||||||
|
@ -1087,7 +1087,7 @@ terminal_size_to_cb (GtkAction *action,
|
||||||
|
|
||||||
vte_terminal_set_size (VTE_TERMINAL (priv->active_screen), width, height);
|
vte_terminal_set_size (VTE_TERMINAL (priv->active_screen), width, height);
|
||||||
|
|
||||||
terminal_window_set_size (window, priv->active_screen, TRUE);
|
terminal_window_update_size (window, priv->active_screen, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1262,7 +1262,7 @@ screen_resize_window_cb (TerminalScreen *screen,
|
||||||
if (screen != priv->active_screen)
|
if (screen != priv->active_screen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
terminal_window_set_size (window, screen, TRUE);
|
terminal_window_update_size (window, screen, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2434,7 +2434,7 @@ terminal_window_show (GtkWidget *widget)
|
||||||
#if 0
|
#if 0
|
||||||
/* At this point, we have our GdkScreen, and hence the right
|
/* At this point, we have our GdkScreen, and hence the right
|
||||||
* font size, so we can go ahead and size the window. */
|
* font size, so we can go ahead and size the window. */
|
||||||
terminal_window_set_size (window, priv->active_screen, FALSE);
|
terminal_window_update_size (window, priv->active_screen, FALSE);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2709,7 +2709,7 @@ terminal_window_set_menubar_visible (TerminalWindow *window,
|
||||||
"[window %p] setting size after toggling menubar visibility\n",
|
"[window %p] setting size after toggling menubar visibility\n",
|
||||||
window);
|
window);
|
||||||
|
|
||||||
terminal_window_set_size (window, priv->active_screen, TRUE);
|
terminal_window_update_size (window, priv->active_screen, TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2732,28 +2732,31 @@ terminal_window_get_notebook (TerminalWindow *window)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
terminal_window_set_size (TerminalWindow *window,
|
terminal_window_update_size (TerminalWindow *window,
|
||||||
TerminalScreen *screen,
|
TerminalScreen *screen,
|
||||||
gboolean even_if_mapped)
|
gboolean even_if_mapped)
|
||||||
{
|
{
|
||||||
terminal_window_set_size_force_grid (window, screen, even_if_mapped, NULL);
|
terminal_window_update_size_set_geometry (window, screen,
|
||||||
|
even_if_mapped, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
terminal_window_set_size_force_grid (TerminalWindow *window,
|
terminal_window_update_size_set_geometry (TerminalWindow *window,
|
||||||
TerminalScreen *screen,
|
TerminalScreen *screen,
|
||||||
gboolean even_if_mapped,
|
gboolean even_if_mapped,
|
||||||
gchar *force_grid_string)
|
gchar *geometry_string)
|
||||||
{
|
{
|
||||||
TerminalWindowPrivate *priv = window->priv;
|
TerminalWindowPrivate *priv = window->priv;
|
||||||
GtkWidget *widget;
|
GtkWidget *widget;
|
||||||
GtkWidget *app;
|
GtkWidget *app;
|
||||||
gboolean result;
|
gboolean result;
|
||||||
int parse_result;
|
int geom_result;
|
||||||
unsigned int force_grid_width, force_grid_height;
|
gint force_pos_x = 0, force_pos_y = 0;
|
||||||
|
unsigned int force_grid_width = 0, force_grid_height = 0;
|
||||||
int grid_width, grid_height;
|
int grid_width, grid_height;
|
||||||
gint pixel_width, pixel_height;
|
gint pixel_width, pixel_height;
|
||||||
GdkWindow *gdk_window;
|
GdkWindow *gdk_window;
|
||||||
|
GdkGravity pos_gravity;
|
||||||
|
|
||||||
gdk_window = gtk_widget_get_window (GTK_WIDGET (window));
|
gdk_window = gtk_widget_get_window (GTK_WIDGET (window));
|
||||||
result = TRUE;
|
result = TRUE;
|
||||||
|
@ -2780,22 +2783,22 @@ terminal_window_set_size_force_grid (TerminalWindow *window,
|
||||||
g_assert (app != NULL);
|
g_assert (app != NULL);
|
||||||
|
|
||||||
terminal_screen_get_size (screen, &grid_width, &grid_height);
|
terminal_screen_get_size (screen, &grid_width, &grid_height);
|
||||||
|
if (geometry_string != NULL)
|
||||||
if (force_grid_string != NULL)
|
|
||||||
{
|
{
|
||||||
parse_result = terminal_window_XParseGeometry (force_grid_string,
|
geom_result = terminal_window_XParseGeometry (geometry_string,
|
||||||
NULL, NULL,
|
&force_pos_x,
|
||||||
|
&force_pos_y,
|
||||||
&force_grid_width,
|
&force_grid_width,
|
||||||
&force_grid_height);
|
&force_grid_height);
|
||||||
if (parse_result == NoValue)
|
if (geom_result == NoValue)
|
||||||
result = FALSE;
|
result = FALSE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
parse_result = NoValue;
|
geom_result = NoValue;
|
||||||
|
|
||||||
if (parse_result & WidthValue)
|
if ((geom_result & WidthValue) != 0)
|
||||||
grid_width = force_grid_width;
|
grid_width = force_grid_width;
|
||||||
if (parse_result & HeightValue)
|
if ((geom_result & HeightValue) != 0)
|
||||||
grid_height = force_grid_height;
|
grid_height = force_grid_height;
|
||||||
|
|
||||||
/* the "old" struct members were updated by update_geometry */
|
/* the "old" struct members were updated by update_geometry */
|
||||||
|
@ -2814,11 +2817,47 @@ terminal_window_set_size_force_grid (TerminalWindow *window,
|
||||||
priv->old_chrome_width, priv->old_chrome_height,
|
priv->old_chrome_width, priv->old_chrome_height,
|
||||||
pixel_width, pixel_height);
|
pixel_width, pixel_height);
|
||||||
|
|
||||||
|
pos_gravity = GDK_GRAVITY_NORTH_WEST;
|
||||||
|
if ((geom_result & XNegative) != 0 && (geom_result & YNegative) != 0)
|
||||||
|
pos_gravity = GDK_GRAVITY_SOUTH_EAST;
|
||||||
|
else if ((geom_result & XNegative) != 0)
|
||||||
|
pos_gravity = GDK_GRAVITY_NORTH_EAST;
|
||||||
|
else if ((geom_result & YNegative) != 0)
|
||||||
|
pos_gravity = GDK_GRAVITY_SOUTH_WEST;
|
||||||
|
|
||||||
|
if ((geom_result & XValue) == 0)
|
||||||
|
force_pos_x = 0;
|
||||||
|
if ((geom_result & YValue) == 0)
|
||||||
|
force_pos_y = 0;
|
||||||
|
|
||||||
|
if (pos_gravity == GDK_GRAVITY_SOUTH_EAST ||
|
||||||
|
pos_gravity == GDK_GRAVITY_NORTH_EAST)
|
||||||
|
force_pos_x = gdk_screen_get_width (gtk_widget_get_screen (app)) -
|
||||||
|
pixel_width + force_pos_x;
|
||||||
|
if (pos_gravity == GDK_GRAVITY_SOUTH_WEST ||
|
||||||
|
pos_gravity == GDK_GRAVITY_SOUTH_EAST)
|
||||||
|
force_pos_y = gdk_screen_get_height (gtk_widget_get_screen (app)) -
|
||||||
|
pixel_height + force_pos_y;
|
||||||
|
|
||||||
|
/* we don't let you put a window offscreen; maybe some people would
|
||||||
|
* prefer to be able to, but it's kind of a bogus thing to do.
|
||||||
|
*/
|
||||||
|
if (force_pos_x < 0)
|
||||||
|
force_pos_x = 0;
|
||||||
|
if (force_pos_y < 0)
|
||||||
|
force_pos_y = 0;
|
||||||
|
|
||||||
if (even_if_mapped && gtk_widget_get_mapped (app))
|
if (even_if_mapped && gtk_widget_get_mapped (app))
|
||||||
gtk_window_resize (GTK_WINDOW (app), pixel_width, pixel_height);
|
gtk_window_resize (GTK_WINDOW (app), pixel_width, pixel_height);
|
||||||
else
|
else
|
||||||
gtk_window_set_default_size (GTK_WINDOW (app), pixel_width, pixel_height);
|
gtk_window_set_default_size (GTK_WINDOW (app), pixel_width, pixel_height);
|
||||||
|
|
||||||
|
if ((geom_result & XValue) != 0 || (geom_result & YValue) != 0)
|
||||||
|
{
|
||||||
|
gtk_window_set_gravity (GTK_WINDOW (app), pos_gravity);
|
||||||
|
gtk_window_move (GTK_WINDOW (app), force_pos_x, force_pos_y);
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2976,7 +3015,7 @@ notebook_page_selected_callback (GtkWidget *notebook,
|
||||||
_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY,
|
_terminal_debug_print (TERMINAL_DEBUG_GEOMETRY,
|
||||||
"[window %p] setting size after flipping notebook pages\n",
|
"[window %p] setting size after flipping notebook pages\n",
|
||||||
window);
|
window);
|
||||||
terminal_window_set_size (window, screen, TRUE);
|
terminal_window_update_size (window, screen, TRUE);
|
||||||
|
|
||||||
terminal_window_update_tabs_menu_sensitivity (window);
|
terminal_window_update_tabs_menu_sensitivity (window);
|
||||||
terminal_window_update_encoding_menu_active_encoding (window);
|
terminal_window_update_encoding_menu_active_encoding (window);
|
||||||
|
@ -3115,7 +3154,7 @@ notebook_page_removed_callback (GtkWidget *notebook,
|
||||||
pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook));
|
pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook));
|
||||||
if (pages == 1)
|
if (pages == 1)
|
||||||
{
|
{
|
||||||
terminal_window_set_size (window, priv->active_screen, TRUE);
|
terminal_window_update_size (window, priv->active_screen, TRUE);
|
||||||
}
|
}
|
||||||
else if (pages == 0)
|
else if (pages == 0)
|
||||||
{
|
{
|
||||||
|
@ -3296,7 +3335,7 @@ terminal_window_update_geometry (TerminalWindow *window)
|
||||||
window);
|
window);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We need these for the size calculation in terminal_window_set_size(),
|
/* We need these for the size calculation in terminal_window_update_size(),
|
||||||
* so we set them unconditionally. */
|
* so we set them unconditionally. */
|
||||||
priv->old_char_width = char_width;
|
priv->old_char_width = char_width;
|
||||||
priv->old_char_height = char_height;
|
priv->old_char_height = char_height;
|
||||||
|
@ -4208,7 +4247,7 @@ tabs_detach_tab_callback (GtkAction *action,
|
||||||
terminal_window_move_screen (window, new_window, screen, -1);
|
terminal_window_move_screen (window, new_window, screen, -1);
|
||||||
|
|
||||||
/* FIXME: this seems wrong if tabs are shown in the window */
|
/* FIXME: this seems wrong if tabs are shown in the window */
|
||||||
terminal_window_set_size (new_window, screen, FALSE);
|
terminal_window_update_size (new_window, screen, FALSE);
|
||||||
|
|
||||||
gtk_window_present_with_time (GTK_WINDOW (new_window), gtk_get_current_event_time ());
|
gtk_window_present_with_time (GTK_WINDOW (new_window), gtk_get_current_event_time ());
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,14 +84,15 @@ TerminalScreen* terminal_window_get_active (TerminalWindow *window);
|
||||||
GList* terminal_window_list_screen_containers (TerminalWindow *window);
|
GList* terminal_window_list_screen_containers (TerminalWindow *window);
|
||||||
|
|
||||||
void terminal_window_update_geometry (TerminalWindow *window);
|
void terminal_window_update_geometry (TerminalWindow *window);
|
||||||
void terminal_window_set_size (TerminalWindow *window,
|
void
|
||||||
|
terminal_window_update_size (TerminalWindow *window,
|
||||||
TerminalScreen *screen,
|
TerminalScreen *screen,
|
||||||
gboolean even_if_mapped);
|
gboolean even_if_mapped);
|
||||||
gboolean
|
gboolean
|
||||||
terminal_window_set_size_force_grid (TerminalWindow *window,
|
terminal_window_update_size_set_geometry (TerminalWindow *window,
|
||||||
TerminalScreen *screen,
|
TerminalScreen *screen,
|
||||||
gboolean even_if_mapped,
|
gboolean even_if_mapped,
|
||||||
gchar *force_grid_string);
|
gchar *geometry_string);
|
||||||
|
|
||||||
GtkWidget* terminal_window_get_notebook (TerminalWindow *window);
|
GtkWidget* terminal_window_get_notebook (TerminalWindow *window);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue