1
0
Fork 0
mirror of https://github.com/albfan/miraclecast.git synced 2025-03-09 23:38:56 +00:00

demo/miracle-wfdctl: fix some build issues for GDK version older then

3.22
This commit is contained in:
Derek Dai 2017-03-23 23:13:24 +08:00
parent 3b95b6078c
commit 1e374b0a49
No known key found for this signature in database
GPG key ID: E109CC97553EF009
2 changed files with 60 additions and 14 deletions

View file

@ -8,10 +8,21 @@ if(NOT VALA_DBUS_BINDING_TOOL)
message(FATAL_ERROR "vala-dbus-binding-tool not found") message(FATAL_ERROR "vala-dbus-binding-tool not found")
endif() endif()
find_program(GLIB_COMPILE_RESOURCES glib-compile-resources)
if(NOT GLIB_COMPILE_RESOURCES)
message(FATAL_ERROR "glib-compile-resources not found")
endif()
find_library(READLINE REQUIRED) find_library(READLINE REQUIRED)
pkg_check_modules(GIO2 REQUIRED gio-2.0) pkg_check_modules(GIO2 REQUIRED gio-2.0)
pkg_check_modules(GDK3 REQUIRED gdk-3.0) pkg_check_modules(GDK3 REQUIRED gdk-3.0)
execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --atleast-version 3.22 gdk-3.0
RESULT_VARIABLE GDK_VERSION_NEWER_THEN_3_22)
if(NOT GDK_VERSION_NEWER_THEN_3_22)
set(VALA_EXTRA_OPTIONS -D GDK_VERSION_NEWER_THEN_3_22)
endif()
set(RES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/res) set(RES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/res)
set(DBUS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/dbus) set(DBUS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/dbus)
@ -41,6 +52,7 @@ add_custom_command(OUTPUT wfdctl.c
org-freedesktop-networkmanager.vala org-freedesktop-networkmanager.vala
org-freedesktop-miracle-wifi.vala org-freedesktop-miracle-wifi.vala
org-freedesktop-miracle-wfd.vala org-freedesktop-miracle-wfd.vala
${VALA_EXTRA_OPTIONS}
DEPENDS wfdctl.vala DEPENDS wfdctl.vala
${CMAKE_CURRENT_BINARY_DIR}/org-freedesktop-networkmanager.vala ${CMAKE_CURRENT_BINARY_DIR}/org-freedesktop-networkmanager.vala
${CMAKE_CURRENT_BINARY_DIR}/org-freedesktop-miracle-wifi.vala ${CMAKE_CURRENT_BINARY_DIR}/org-freedesktop-miracle-wifi.vala
@ -49,8 +61,9 @@ add_custom_command(OUTPUT wfdctl.c
add_custom_command(OUTPUT wfdctl-res.c add_custom_command(OUTPUT wfdctl-res.c
COMMAND ${GLIB_COMPILE_RESOURCES} COMMAND ${GLIB_COMPILE_RESOURCES}
--generate-source
--target=${CMAKE_CURRENT_BINARY_DIR}/wfdctl-res.c --target=${CMAKE_CURRENT_BINARY_DIR}/wfdctl-res.c
--generate-source ${RES_DIR}/wfdctl-res.xml ${RES_DIR}/wfdctl-res.xml
DEPENDS ${RES_DIR}/wfdctl.ui DEPENDS ${RES_DIR}/wfdctl.ui
${RES_DIR}/wfdctl-res.xml ${RES_DIR}/wfdctl-res.xml
WORKING_DIRECTORY ${RES_DIR}) WORKING_DIRECTORY ${RES_DIR})

View file

@ -330,25 +330,53 @@ private class WfdCtl : GLib.Application
info("P2P group formed"); info("P2P group formed");
} }
#if GDK_VERSION_NEWER_THEN_3_22
private void get_monitor_geometry(out Gdk.Rectangle g) throws Error
{
Gdk.Monitor m;
if(-1 == opt_monitor_num) {
m = display.get_primary_monitor();
}
else {
m = display.get_monitor(opt_monitor_num);
}
if(null == m) {
throw new WfdCtlError.MONITOR_GONE("specified monitor disappeared");
}
g = m.geometry;
}
#else
private void get_monitor_geometry(out Gdk.Rectangle g) throws Error
{
var s = display.get_default_screen();
int m = (-1 == opt_monitor_num)
? s.get_primary_monitor()
: opt_monitor_num;
if(s.get_n_monitors() <= m) {
throw new WfdCtlError.MONITOR_GONE("specified monitor disappeared");
}
s.get_monitor_geometry(m, out g);
}
#endif
private async void establish_session() throws Error private async void establish_session() throws Error
{ {
weak Gdk.Monitor m = (-1 == opt_monitor_num) Gdk.Rectangle g;
? display.get_primary_monitor() get_monitor_geometry(out g);
: display.get_monitor(opt_monitor_num);
if(null == m) {
throw new WfdCtlError.MONITOR_GONE("monitor %d gone",
opt_monitor_num);
}
info("establishing display session..."); info("establishing display session...");
Sink sink = find_sink_by_mac(opt_peer_mac); Sink sink = find_sink_by_mac(opt_peer_mac);
sink.start_session(opt_authority, sink.start_session(opt_authority,
@"x://$(opt_display)", @"x://$(opt_display)",
m.geometry.x, g.x,
m.geometry.y, g.y,
m.geometry.width, g.width,
m.geometry.height, g.height,
null == opt_audio_device ? "" : opt_audio_device); null == opt_audio_device ? "" : opt_audio_device);
} }
@ -412,8 +440,13 @@ private class WfdCtl : GLib.Application
return false; return false;
} }
if(-1 != opt_monitor_num && int n_monitors;
null == display.get_monitor(opt_monitor_num)) { #if GDK_VERSION_NEWER_THEN_3_22
n_monitors = display.get_n_monitors();
#else
n_monitors = display.get_default_screen().get_n_monitors();
#endif
if(-1 > opt_monitor_num || opt_monitor_num >= n_monitors) {
print("invalid screen number option: %d", opt_monitor_num); print("invalid screen number option: %d", opt_monitor_num);
return false; return false;
} }