C++ C++;。gtk#U窗口大小调整不';t调整窗口大小

C++ C++;。gtk#U窗口大小调整不';t调整窗口大小,c++,gtk,gnome,C++,Gtk,Gnome,我有一个类(称为BorderWindow),它实际上是围绕GtkWidget的。此类表示特定应用程序窗口(例如,终端窗口)周围的边界。在BorderWindow构造函数中,我创建了计时器,以便每秒调用BorderWindow::ClockTick函数。 此函数内部的边框大小(实际上是GtkWidget)与绑定应用程序的窗口(在本例中为终端)进行比较,如果它不同,则调用gtk\u window\u resize。但是,如果我调用gtk\u window\u get\u size它将返回旧值 gbo

我有一个类(称为
BorderWindow
),它实际上是围绕
GtkWidget
的。此类表示特定应用程序窗口(例如,终端窗口)周围的边界。在
BorderWindow
构造函数中,我创建了计时器,以便每秒调用
BorderWindow::ClockTick
函数。
此函数内部的边框大小(实际上是
GtkWidget
)与绑定应用程序的窗口(在本例中为终端)进行比较,如果它不同,则调用
gtk\u window\u resize
。但是,如果我调用
gtk\u window\u get\u 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;
}
gboolean BorderWindow::ClockTick(gpointer数据)
{
自动转换=重新解释转换(数据);
int x=0,y=0;
GtkWindow*pWindow=GTK_窗口(即->m_borderWindowHandle);
gtk_窗口_获取_大小(pWindow,&x,&y);
转储程序信息(“当前大小:%dx%d;新大小:%dx%d”,x,y,that->m_windowRect.width,that->m_windowRect.height);//为调试添加
如果(x!=该->m|u windowRect.width | y!=该->m|u windowRect.height)
{
gtk_window_resize(pWindows,即->m_windowRect.width,即->m_windowRect.height);
那->创建边界();
GtkWindow*pWindow=GTK_窗口(即->m_borderWindowHandle);//为调试添加
gtk_window_get_size(pWindow,&x,&y);//为调试添加
转储程序信息(“调整大小后:%dx%d”,x,y);//添加用于调试
}
gtk_窗口_获取_位置(pWindows、x和y);
如果(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);
那->m_highlightFrame=!那->m_highlightFrame;
返回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::时钟信号(gpointer):调整大小后:734x540

如您所见,窗口没有调整大小。 这个代码片段对xfce和Unity DEs很好,但对GNOME(和GNOME classic)不起作用。 谁能解释一下我做错了什么,以及如何调整GNOME DE的窗口大小? 谢谢