1
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
3
/* Metacity resizing-terminal-window feedback */
6
* Copyright (C) 2001 Havoc Pennington
8
* This program is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU General Public License as
10
* published by the Free Software Foundation; either version 2 of the
11
* License, or (at your option) any later version.
13
* This program is distributed in the hope that it will be useful, but
14
* WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* General Public License for more details.
18
* You should have received a copy of the GNU General Public License
19
* along with this program; if not, write to the Free Software
20
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
25
#include "resizepopup.h"
30
struct _MetaResizePopup
32
GtkWidget *size_window;
33
GtkWidget *size_label;
46
meta_ui_resize_popup_new (Display *display,
49
MetaResizePopup *popup;
51
popup = g_new0 (MetaResizePopup, 1);
53
popup->display = display;
54
popup->screen_number = screen_number;
60
meta_ui_resize_popup_free (MetaResizePopup *popup)
62
g_return_if_fail (popup != NULL);
64
if (popup->size_window)
65
gtk_widget_destroy (popup->size_window);
71
ensure_size_window (MetaResizePopup *popup)
75
if (popup->size_window)
78
popup->size_window = gtk_window_new (GTK_WINDOW_POPUP);
80
gtk_window_set_screen (GTK_WINDOW (popup->size_window),
81
gdk_display_get_screen (gdk_x11_lookup_xdisplay (popup->display),
82
popup->screen_number));
84
/* never shrink the size window */
85
gtk_window_set_resizable (GTK_WINDOW (popup->size_window),
88
frame = gtk_frame_new (NULL);
89
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
91
gtk_container_add (GTK_CONTAINER (popup->size_window), frame);
93
popup->size_label = gtk_label_new ("");
94
gtk_misc_set_padding (GTK_MISC (popup->size_label), 3, 3);
96
gtk_container_add (GTK_CONTAINER (frame), popup->size_label);
98
gtk_widget_show_all (frame);
102
update_size_window (MetaResizePopup *popup)
108
g_return_if_fail (popup->size_window != NULL);
110
/* Translators: This represents the size of a window. The first number is
111
* the width of the window and the second is the height.
113
str = g_strdup_printf (_("%d x %d"),
114
popup->horizontal_size,
115
popup->vertical_size);
117
gtk_label_set_text (GTK_LABEL (popup->size_label), str);
121
gtk_window_get_size (GTK_WINDOW (popup->size_window), &width, &height);
123
x = popup->rect.x + (popup->rect.width - width) / 2;
124
y = popup->rect.y + (popup->rect.height - height) / 2;
126
if (GTK_WIDGET_REALIZED (popup->size_window))
128
/* using move_resize to avoid jumpiness */
129
gdk_window_move_resize (popup->size_window->window,
135
gtk_window_move (GTK_WINDOW (popup->size_window),
141
sync_showing (MetaResizePopup *popup)
145
if (popup->size_window)
146
gtk_widget_show (popup->size_window);
148
if (popup->size_window && GTK_WIDGET_REALIZED (popup->size_window))
149
gdk_window_raise (popup->size_window->window);
153
if (popup->size_window)
154
gtk_widget_hide (popup->size_window);
159
meta_ui_resize_popup_set (MetaResizePopup *popup,
166
gboolean need_update_size;
167
int display_w, display_h;
169
g_return_if_fail (popup != NULL);
171
need_update_size = FALSE;
173
display_w = rect.width - base_width;
175
display_w /= width_inc;
177
display_h = rect.height - base_height;
179
display_h /= height_inc;
181
if (!meta_rectangle_equal(&popup->rect, &rect) ||
182
display_w != popup->horizontal_size ||
183
display_h != popup->vertical_size)
184
need_update_size = TRUE;
187
popup->vertical_size = display_h;
188
popup->horizontal_size = display_w;
190
if (need_update_size)
192
ensure_size_window (popup);
193
update_size_window (popup);
196
sync_showing (popup);
200
meta_ui_resize_popup_set_showing (MetaResizePopup *popup,
203
g_return_if_fail (popup != NULL);
205
if (showing == popup->showing)
208
popup->showing = !!showing;
212
ensure_size_window (popup);
213
update_size_window (popup);
216
sync_showing (popup);