Как получить размер развернутого окна, не показывая его?
Я пытаюсь определить размер развернутого окна, чтобы я мог установить размер окна на значение, близкое к нему. Тем не менее, я не знаю, как это сделать без предварительного показа развернутого окна. Есть ли способ испустить сигнал, сгенерированный gtk_window_maximize до того, как отобразится окно?
Ниже моя попытка до сих пор. Проблема в том, что я могу увидеть вспышку развернутого окна до того, как произойдет изменение размера.
#include <gtk/gtk.h>
int signal_id;
void resize(GtkWindow *window, GdkEvent *event, gpointer data)
{
gint width, height;
g_signal_handler_disconnect(G_OBJECT(window), signal_id);
gtk_window_get_size(window, &width, &height);
gtk_window_resize(window, width - 10, height - 10);
}
int main(int argc, char *argv[])
{
GtkWidget *window;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
signal_id = g_signal_connect(G_OBJECT(window), "configure-event", G_CALLBACK(resize), NULL);
gtk_window_maximize(GTK_WINDOW(window));
gtk_widget_show_all(GTK_WIDGET(window));
gtk_main();
return 0;
}
1 ответ
Решение
Нет, это невозможно, потому что пока оконный менеджер не отобразит окно, фактический размер неизвестен. Но что вы можете сделать, это получить размер экрана:
width=gdk_screen_width();
height=gdk_screen_height();
gtk_widget_set_size_request(window, width/2, height/2);