2009-12-10 3 views
0

Я пишу программу, которая должна установить окно чуть выше/ниже поддона для gtk. Я попытался использовать два подхода, которые не удалось. Один из них использовал функцию gtk_status_icon_position_menu и поместил окно в точку, в которую пользователь нажимает (в панели лотка). Проблема в том, что эти решения работают в gnome (Linux), но не в Windows. В Linux они работают, потому что оконный менеджер, похоже, не позволяет размещать окна в панели лотка, соблюдая максимально возможное значение. В Windows этого не происходит, и окно может «выйти» на экран, который, по понятным причинам, не нужен.Размещение окна рядом с системным лотком

С этим заявлением я отправился на работу. Моя идея состояла в том, чтобы установить окно в месте щелчка мыши и получить координаты x и y для обычного размещения в окне и с проверкой размера, если бы оно находилось в границах экрана. Если бы не исправление. Я придумал необходимые функции, но по какой-то причине окно gdk_drawable_get_size (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 –