保存gtk窗口位置

Ade*_*med 6 c linux gtk

我正在尝试保存gtk窗口位置(绝对)以恢复它,我再次打开应用程序

到目前为止这是我的代码:

gint x,y;
  gtk_window_get_position(main_window,&x,&y);
  printf("current position is:\nx: %i\ny:%i\n",x,y);
Run Code Online (Sandbox Code Playgroud)

这个代码在应用程序退出时运行,我总是得到:当前位置是:x:0 y:0

我究竟做错了什么.

sjs*_*sam 4

gtk_window_get_position通常会做出最好的猜测,但你不能依赖它,因为

X Window 系统没有指定获取窗口管理器放置在窗口上的装饰的几何形状的方法。

(来自gtk_window_get_position 参考

要查看该功能的运行情况,请尝试如下所示:

#include <gtk/gtk.h>

int main(int argv, char* argc[])
{
    GtkWidget *window, *button;
    gint x, y;

    gtk_init(&argv, &argc);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "Test Window");
    button = gtk_button_new_with_label("Close");

    g_signal_connect(G_OBJECT(button), "clicked", 
            G_CALLBACK(gtk_main_quit), (gpointer)NULL);
    gtk_container_set_border_width(GTK_CONTAINER(window), 10);
    gtk_container_add(GTK_CONTAINER(window), button);
    gtk_window_get_position(GTK_WINDOW(window), &x, &y);

    printf("current position is:\nx: %i\ny:%i\n", x, y);
    gtk_window_set_position(GTK_WINDOW(window), 
            GTK_WIN_POS_CENTER_ALWAYS);
    gtk_window_get_position(GTK_WINDOW(window), &x, &y);

    printf("new position is:\nx: %i\ny:%i\n", x, y);
    gtk_widget_show_all(window); 


    gtk_main();
}
Run Code Online (Sandbox Code Playgroud)

编辑

如果您希望窗口出现在特定位置,您可以尝试以下操作:

 gtk_window_move(GTK_WINDOW(window), 420, 180);
Run Code Online (Sandbox Code Playgroud)

但是上面的函数应该放在后面

gtk_widget_show_all(window);
Run Code Online (Sandbox Code Playgroud)

因为

大多数窗口管理器都会忽略对初始窗口位置的请求(而不是使用用户定义的放置算法)并在窗口显示后尊重请求。

(来自gtk_window_move 参考