2009-12-10 5 views
0

gtk의 트레이 바로 위나 아래에 창을 설정해야하는 프로그램을 작성하고 있습니다. 나는 실패한 2 가지 방법을 사용하여 시도했다. 하나는 gtk_status_icon_position_menu 함수를 사용하고 사용자가 (트레이 바에서) 클릭하는 지점에 윈도우를 배치하는 것입니다. 문제는 이러한 솔루션이 gnome (Linux)에서는 작동하지만 Windows에서는 작동하지 않는다는 것입니다. 리눅스에서는 창 관리자가 트레이 패널에 윈도우를 배치하는 것을 허용하지 않으므로 가능한 작동합니다. Windows에서는 이런 일이 발생하지 않고 화면이 "바람직하지 않은"화면 밖으로 나올 수 있습니다.시스템 트레이 가까이 창 배치

이 말로 나는 주변에서 일하러 나갔다. 내 생각은 마우스 클릭 위치에 창을 설정하고 일반 창 배치의 x 및 y 좌표를 얻는 것이고 화면 경계 내에서 크기를 확인하는 것입니다. 그것이 수정되지 않았다면. 필요한 함수를 찾았지만 gdk_drawable_get_size (window-> window, & WindowWidth, & WindowHeight) 및 다른 유사한 함수는 신호 함수의 두 번째 실행 후에 올바른 크기 값만 제공합니다. 첫 번째 실행의 결과는 크기와 너비 모두에 1입니다. (I는 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 OS에서는 그렇지 않습니다. –

관련 문제