C ++. gtk_window_resize не меняет размер окна - PullRequest
1 голос
/ 20 мая 2019

У меня есть класс (называемый BorderWindow), который фактически обернут вокруг GtkWidget. Этот класс представляет границу вокруг окна конкретного приложения (например, скажем, окна терминала). Внутри BorderWindow конструктора я создаю таймер, поэтому каждую секунду вызывается функция BorderWindow::ClockTick.
Внутри этой функции размер границы (на самом деле GtkWidget) сравнивается с окном привязанного приложения (в нашем случае это Terminal), и, если оно отличается, вызывается gtk_window_resize. Однако, если я позвоню, то gtk_window_get_size вернет старые значения.

gboolean BorderWindow::ClockTick(gpointer data)
{
auto that = reinterpret_cast<BorderWindow*>(data);

int x = 0, y = 0;
GtkWindow* pWindow = GTK_WINDOW(that->m_borderWindowHandle);
gtk_window_get_size(pWindow, &x, &y);
DUMPER_INFO("curr size: %dx%d; new size: %dx%d", x, y, that->m_windowRect.width, that->m_windowRect.height); // added for debug
if(x != that->m_windowRect.width || y != that->m_windowRect.height)
{
    gtk_window_resize(pWindow, that->m_windowRect.width, that->m_windowRect.height);
    that->CreateBorder();
    GtkWindow* pWindow = GTK_WINDOW(that->m_borderWindowHandle); // added for debug
    gtk_window_get_size(pWindow, &x, &y); // added for debug
    DUMPER_INFO("after resize: %dx%d", x, y); // added for debug
}

gtk_window_get_position(pWindow, &x, &y);
if(x != that->m_windowRect.x || y != that->m_windowRect.y)
{
    gtk_window_move(pWindow, that->m_windowRect.x, that->m_windowRect.y);
}
gdk_window_invalidate_rect(gtk_widget_get_window(that->m_borderWindowHandle), nullptr, FALSE);
that->m_highlightFrame = !that->m_highlightFrame;

return TRUE;
}

Вот отладочный вывод

20-05-19 11: 24: 40.294 [139856177248000] ИНФОРМАЦИЯ 1537 %% - статический gboolean LinuxBorderWindow :: ClockTick (gpointer): размер курсора: 734x540; новый размер: 1024x706

20-05-19 11: 24: 40.295 [139856177248000] ИНФОРМАЦИЯ 1537 %% - статический gboolean LinuxBorderWindow :: ClockTick (gpointer): после изменения размера: 734x540

Итак, как вы можете видеть, окно не было изменено. Этот фрагмент кода отлично работает для xfce и Unity DE, но не работает для GNOME (и GNOME classic). Может кто-нибудь объяснить, что я делаю неправильно и как изменить размер окна для GNOME DE? Благодаря.

...