El siguiente enfoque es un poco intrincado, pero es lo que usaría. Debería ser robusto incluso cuando hay una interacción compleja entre el administrador de ventanas y GTK + cuando se asigna una ventana, por ejemplo, cuando algunos de los paneles se ocultan automáticamente.
La idea básica es crear una ventana maximizada sin decoración transparente para cada pantalla, obtener su geometría (tamaño y posición) cuando se mapea (por ejemplo, usando una devolución de llamada map-event
), y destruirlas inmediatamente. Eso te proporciona el área utilizable dentro de cada pantalla. A continuación, puede usar su enfoque existente gdk_screen_get_monitor_geometry()
para determinar cómo el área utilizable se divide entre monitores, si corresponde.
En detalle:
Uso gdk_display_get_default()
para obtener la pantalla por defecto, entonces gdk_display_get_n_screens()
para averiguar cuántas pantallas que tiene.
Crea una nueva ventana para cada pantalla usando gtk_window_new()
, moviendo las ventanas a sus pantallas respectivas usando gtk_window_set_screen()
. Descobra las ventanas usando gtk_window_set_decorated(,FALSE)
, maximícelas usando gtk_window_maximize(,TRUE)
, y hazlas transparentes usando gtk_window_set_opacity(,0.0)
. Conecte la señal map-event
a un controlador de devolución de llamada (usando g_signal_connect()
). Muestre la ventana usando gtk_widget_show()
.
manejador
La señal tiene que llamar gtk_window_get_position()
y/o gtk_window_get_size()
para obtener la posición y/o el tamaño de la ventana asignada recientemente, y luego destruir la ventana usando gtk_widget_destroy()
.
Tenga en cuenta que, en la práctica, solo necesita una ventana. Yo personalmente usaría un bucle simple. Sospecho que debido a las rarezas/errores del administrador de ventanas, es mucho más sólido crear una nueva ventana para cada pantalla, en lugar de simplemente mover la misma ventana entre las pantallas. Resulta que es más fácil también, ya que puede usar una función de devolución de llamada simple para obtener el área utilizable para cada pantalla.
Como dije, esto es bastante intrincado. Por otro lado, una aplicación estándar no debería preocuparse por los tamaños de pantalla; simplemente debe hacer lo que el usuario o administrador de la ventana le pregunte. Por eso, no me sorprendería si no hay mejores instalaciones para encontrar esta información. El tamaño de la pantalla puede cambiar en cualquier punto, por ejemplo, si el usuario gira su pantalla o cambia la resolución de la pantalla.
¿Te importa compartir la solución? –
por favor lea la publicación - para ayuda adicional vea aquí http://bit.ly/1t8MY1H –
Recibí el código fuente x-tile, no soy un maniquí. Pero es más fácil ver algunas llamadas al sistema en comparación con buscar un código fuente completo, ¿no crees? –