mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-03-22 14:39:24 -05:00
Use the appalling gnome-terminal hack for server-controlled resizes
rather than the gtk_window_set_policy approach; the GNOME people say that the former is the Right Thing in spite of the latter looking obviously plausible. [originally from svn r2066]
This commit is contained in:
parent
851a376359
commit
69f78385ab
67
unix/pterm.c
67
unix/pterm.c
@ -858,9 +858,68 @@ void set_raw_mouse_mode(int activate)
|
|||||||
|
|
||||||
void request_resize(int w, int h)
|
void request_resize(int w, int h)
|
||||||
{
|
{
|
||||||
gtk_drawing_area_size(GTK_DRAWING_AREA(inst->area),
|
int large_x, large_y;
|
||||||
inst->font_width * w + 2*cfg.window_border,
|
int offset_x, offset_y;
|
||||||
inst->font_height * h + 2*cfg.window_border);
|
int area_x, area_y;
|
||||||
|
GtkRequisition inner, outer;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is a heinous hack dreamed up by the gnome-terminal
|
||||||
|
* people to get around a limitation in gtk. The problem is
|
||||||
|
* that in order to set the size correctly we really need to be
|
||||||
|
* calling gtk_window_resize - but that needs to know the size
|
||||||
|
* of the _whole window_, not the drawing area. So what we do
|
||||||
|
* is to set an artificially huge size request on the drawing
|
||||||
|
* area, recompute the resulting size request on the window,
|
||||||
|
* and look at the difference between the two. That gives us
|
||||||
|
* the x and y offsets we need to translate drawing area size
|
||||||
|
* into window size for real, and then we call
|
||||||
|
* gtk_window_resize.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We start by retrieving the current size of the whole window.
|
||||||
|
* Adding a bit to _that_ will give us a value we can use as a
|
||||||
|
* bogus size request which guarantees to be bigger than the
|
||||||
|
* current size of the drawing area.
|
||||||
|
*/
|
||||||
|
get_window_pixels(&large_x, &large_y);
|
||||||
|
large_x += 32;
|
||||||
|
large_y += 32;
|
||||||
|
|
||||||
|
#if GTK_CHECK_VERSION(2,0,0)
|
||||||
|
gtk_widget_set_size_request(inst->area, large_x, large_y);
|
||||||
|
#else
|
||||||
|
gtk_widget_set_usize(inst->area, large_x, large_y);
|
||||||
|
#endif
|
||||||
|
gtk_widget_size_request(inst->area, &inner);
|
||||||
|
gtk_widget_size_request(inst->window, &outer);
|
||||||
|
|
||||||
|
offset_x = outer.width - inner.width;
|
||||||
|
offset_y = outer.height - inner.height;
|
||||||
|
|
||||||
|
area_x = inst->font_width * w + 2*cfg.window_border;
|
||||||
|
area_y = inst->font_height * h + 2*cfg.window_border;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Now we must set the size request on the drawing area back to
|
||||||
|
* something sensible before we commit the real resize. Best
|
||||||
|
* way to do this, I think, is to set it to what the size is
|
||||||
|
* really going to end up being.
|
||||||
|
*/
|
||||||
|
#if GTK_CHECK_VERSION(2,0,0)
|
||||||
|
gtk_widget_set_size_request(inst->area, area_x, area_y);
|
||||||
|
#else
|
||||||
|
gtk_widget_set_usize(inst->area, area_x, area_y);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GTK_CHECK_VERSION(2,0,0)
|
||||||
|
gtk_window_resize(GTK_WINDOW(inst->window),
|
||||||
|
area_x + offset_x, area_y + offset_y);
|
||||||
|
#else
|
||||||
|
gdk_window_resize(inst->window->window,
|
||||||
|
area_x + offset_x, area_y + offset_y);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void real_palette_set(int n, int r, int g, int b)
|
void real_palette_set(int n, int r, int g, int b)
|
||||||
@ -1435,8 +1494,6 @@ int main(int argc, char **argv)
|
|||||||
if (cfg.scrollbar)
|
if (cfg.scrollbar)
|
||||||
gtk_box_pack_start(inst->hbox, inst->sbar, FALSE, FALSE, 0);
|
gtk_box_pack_start(inst->hbox, inst->sbar, FALSE, FALSE, 0);
|
||||||
|
|
||||||
gtk_window_set_policy(GTK_WINDOW(inst->window), FALSE, TRUE, TRUE);
|
|
||||||
|
|
||||||
gtk_container_add(GTK_CONTAINER(inst->window), GTK_WIDGET(inst->hbox));
|
gtk_container_add(GTK_CONTAINER(inst->window), GTK_WIDGET(inst->hbox));
|
||||||
|
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user