Размещение окна рядом с системным треем

Я пишу программу, которая должна установить окно чуть выше/ниже панели трея для gtk. Я попытался использовать 2 подхода, которые не увенчались успехом. Один использовал функцию 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;
            }

Как я могу делать то, что хочу, портативным способом?


person Paulo Neves    schedule 10.12.2009    source источник


Ответы (1)


Я думаю, что gtk_status_icon_position_menu должен работать нормально, так как я использовал его для той же цели.
Вы пытаетесь сделать это с X11, каков фактический результат, который вы получаете.

person User7723337    schedule 22.12.2009