2009-12-10 37 views
0

我正在编写一个程序,需要在gtk的托盘栏上方/下方设置一个窗口。我曾尝试使用失败的两种方法。其中一个使用gtk_status_icon_position_menu功能并将窗口放置在用户点击的位置(在托盘栏中)。问题是这些解决方案在gnome(Linux)中工作,但在Windows中不能工作。在Linux中,它们工作的原因是窗口管理器似乎不允许在托盘面板中放置窗口,以尽可能最大限度地实现。在Windows中,这不会发生,并且窗口可以“出”屏幕,这是不可理解的。在系统托盘附近放置一个窗口

与此说我出去工作。我的想法是将窗口设置在鼠标单击的位置,并获取正常窗口位置的x和y坐标以及它的大小检查它是否在屏幕边界内。如果不是这样做的话。我想出了所需的功能,但由于某些原因,gdk_drawable_get_size(window-> window,WindowWidth,& WindowHeight)和其他类似的函数仅在信号函数第二次运行后才提供正确的大小值。第一次运行的结果对于大小和宽度都是1。 (我看过的X11没有给予正确的结果的问题,但我认为这是不是)

event_button = (GdkEventButton *) event; 
     if (event_button->button == 1) 
     { 
      if (active == 0) 
      { 
       gboolean dummy; 
       gint WindowHeight, WindowWidth, WindowPosition[2]; 
       GdkScreen *screen; 
       gint ScreenHeight, ScreenWidth; 

       dummy = FALSE; 
       gtk_widget_show_all(window); 
       gtk_window_present(GTK_WINDOW(window)); 
       gtk_status_icon_position_menu(menu, &pos[X], &pos[Y], &dummy, statusicon); 
       gtk_window_move(GTK_WINDOW(window), pos[X],pos[Y]); 

       gdk_drawable_get_size(window->window ,&WindowWidth, &WindowHeight); 

       screen = gtk_status_icon_get_screen(statusicon); 
       ScreenWidth = gdk_screen_get_width(screen); 
       ScreenHeight = gdk_screen_get_height(screen); 
       g_print("Screen: %d, %d\nGeometry: %d, %d\n",ScreenWidth, ScreenHeight, WindowWidth, window->allocation.height); 

       gtk_entry_set_text(GTK_ENTRY(entry),""); 
       active = 1; 
       return TRUE; 
      } 

我怎么做我想在一个可移植的方式?

回答

0

我认为gtk_status_icon_position_menu应该可以正常工作,因为我用它来达到同样的目的。
你用X11试试这个东西,你得到的实际结果是什么。

+0

它在X11上正常工作。但不是在Windows操作系统上 –