Changes to org.agl.homescreen interface
[staging/HomeScreen.git] / libhomescreen / src / libhomescreen.cpp
1 extern "C" {
2 #include "homescreen.h" // generated from xml
3 }
4 #include "include/libhomescreen.hpp"
5
6 #include <stdio.h>
7 #include <stdlib.h>
8
9 LibHomeScreen::LibHomeScreen()
10 {
11     GError *err = NULL;
12
13     mp_libHomeScreenHomescreen_Proxy = lib_home_screen_homescreen_proxy_new_for_bus_sync(
14                 G_BUS_TYPE_SESSION,
15                 G_DBUS_PROXY_FLAGS_NONE,
16                 "org.agl.homescreen",
17                 "/HomeScreen",
18                 NULL,
19                 &err);
20
21     if (NULL != err)
22     {
23         fprintf(stderr, "Unable to create proxy: %s\n", err->message);
24     }
25 }
26
27 LibHomeScreen::~LibHomeScreen()
28 {
29     g_object_unref(mp_libHomeScreenHomescreen_Proxy);
30 }
31
32 std::list<int> LibHomeScreen::getAllSurfacesOfProcess(int pid)
33 {
34     std::list<int> result;
35
36     GError *err = NULL;
37
38     GVariant *out_surfaceIds;
39
40     lib_home_screen_homescreen_call_get_all_surfaces_of_process_sync(
41                 mp_libHomeScreenHomescreen_Proxy,
42                 pid,
43                 &out_surfaceIds,
44                 NULL,
45                 &err);
46
47     if (NULL != err)
48     {
49         fprintf(stderr, "Unable to call getAllSurfacesOfProcess: %s\n", err->message);
50     }
51
52
53     GVariant *element;
54     GVariantIter iter;
55     int i;
56
57     if (g_variant_iter_init(&iter, out_surfaceIds))
58     {
59         while ((element = g_variant_iter_next_value(&iter)) != NULL)
60         {
61             g_variant_get(element, "i", &i);
62             result.push_back(i);
63             g_variant_unref(element);
64         }
65     }
66
67     return result;
68 }
69
70 int LibHomeScreen::getSurfaceStatus(int surfaceId)
71 {
72     int result;
73     GError *err = NULL;
74
75     GVariant *out_renderArea;
76
77     lib_home_screen_homescreen_call_get_surface_status_sync(
78                 mp_libHomeScreenHomescreen_Proxy,
79                 surfaceId,
80                 &result,
81                 NULL,
82                 &err);
83
84     if (NULL != err)
85     {
86         fprintf(stderr, "Unable to call getSurfaceStatus: %s\n", err->message);
87     }
88
89     return result;
90 }
91
92 void LibHomeScreen::hardKeyPressed(int key)
93 {
94     GError *err = NULL;
95
96     lib_home_screen_homescreen_call_hard_key_pressed_sync(
97                 mp_libHomeScreenHomescreen_Proxy,
98                 key,
99                 NULL,
100                 &err);
101
102     if (NULL != err)
103     {
104         fprintf(stderr, "Unable to call hardKeyPressed: %s\n", err->message);
105     }
106 }
107
108 void LibHomeScreen::renderSurfaceToArea(int surfaceId, int layoutArea)
109 {
110     GError *err = NULL;
111
112     lib_home_screen_homescreen_call_render_surface_to_area_sync(
113                 mp_libHomeScreenHomescreen_Proxy,
114                 surfaceId,
115                 layoutArea,
116                 NULL,
117                 &err);
118
119     if (NULL != err)
120     {
121         fprintf(stderr, "Unable to call renderSurfaceToArea: %s\n", err->message);
122     }
123 }
124
125 void LibHomeScreen::requestSurfaceIdToFullScreen(int surfaceId)
126 {
127     GError *err = NULL;
128
129     lib_home_screen_homescreen_call_request_surface_id_to_full_screen_sync(
130                 mp_libHomeScreenHomescreen_Proxy,
131                 surfaceId,
132                 NULL,
133                 &err);
134
135     if (NULL != err)
136     {
137         fprintf(stderr, "Unable to call requestSurfaceIdToFullScreen: %s\n", err->message);
138     }
139 }