C ++。 gtk_window_resize不会调整窗口大小

时间:2019-05-20 12:45:15

标签: c++ gtk gnome

我有一个类(称为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经典版)。 谁能解释我在做什么,以及如何为GNOME DE调整窗口大小? 谢谢。

0 个答案:

没有答案