保存gtk窗口位置

时间:2015-12-09 00:37:17

标签: 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);

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

我做错了什么。

2 个答案:

答案 0 :(得分:4)

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

  

X Window系统没有指定获取几何的方法   窗户经理把装饰品放在窗户上。

(来自gtk_window_get_position reference

要查看正在使用的功能,请尝试以下操作:

#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();
}

修改

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

 gtk_window_move(GTK_WINDOW(window), 420, 180);

但是上面的功能应放在

之后
gtk_widget_show_all(window);

,因为

  

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

(来自gtk_window_move reference

答案 1 :(得分:0)

我刚刚使用pygobject实现了此功能;不是C,但是看一下它仍然很有用。

您可以找到代码here

我已经将GNOME Builder的默认模板用于python GNOME应用程序,因此如果您使用它来设置项目,则复制起来应该非常容易。