Mir

Merge lp:~alan-griffiths/mir/extend-demo-client-display-config into lp:mir

Proposed by Alan Griffiths
Status: Merged
Approved by: Alan Griffiths
Approved revision: no longer in the source branch.
Merged at revision: 4214
Proposed branch: lp:~alan-griffiths/mir/extend-demo-client-display-config
Merge into: lp:mir
Diff against target: 254 lines (+106/-30)
1 file modified
examples/demo_client_display_config.c (+106/-30)
To merge this branch: bzr merge lp:~alan-griffiths/mir/extend-demo-client-display-config
Reviewer Review Type Date Requested Status
Chris Halse Rogers Approve
Mir CI Bot continuous-integration Approve
Review via email: mp+327871@code.launchpad.net

Commit message

[mir_demo_client_display_config] add orientation changing

To post a comment you must log in.
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:4212
https://mir-jenkins.ubuntu.com/job/mir-ci/3503/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4793
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4970
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=artful/4959
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/4959
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4959
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/4830
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/4830/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4830
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4830/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=artful/4830
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=artful/4830/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/4830
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/4830/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4830
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4830/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=artful/4830
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=artful/4830/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/4830
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/4830/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/4830
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/4830/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3503/rebuild

review: Approve (continuous-integration)
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:4213
https://mir-jenkins.ubuntu.com/job/mir-ci/3504/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4794
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4971
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=artful/4960
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/4960
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4960
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/4831
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/4831/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4831
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4831/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=artful/4831
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=artful/4831/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/4831
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/4831/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4831
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4831/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=artful/4831
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=artful/4831/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/4831
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/4831/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/4831
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/4831/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3504/rebuild

review: Approve (continuous-integration)
Revision history for this message
Chris Halse Rogers (raof) wrote :

Nit:
+ configuration_mode_up,
+ configuration_mode_down

We use C99; it'd be nice if you added a trailing ‘,’ here so that future additions don't also include a superfluous deletion.

Also nit:
- print_current_configuration(ctx->connection);
+ case XKB_KEY_p:print_current_configuration();

Missing newline between case XKB_KEY_p: and print_current_configuration()?

I find the use of the conf global strange, but actual use looks fine. The current code does no error-checking, so we're not losing anything.

Actually... this will crash if you press ‘p’ to print the display configuration before you do anything.

Maybe this should be factored into a little accessor function? Either that or print_current_configuration() needs a null-guard.

review: Needs Fixing
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

> I find the use of the conf global strange, but actual use looks fine. The
> current code does no error-checking, so we're not losing anything.

The use of the conf global is necessitated by the way the toolkit API works: it only ever returns the global config. We need to track the session config ourselves.

Nits fixed

Revision history for this message
Chris Halse Rogers (raof) wrote :

Ah, I didn't make the non-nit part of that review clear:

Non-nit:
mir_demo_client_display_config crashes if you press ‘p’ before making any display configuration changes, due to print_current_configuration() not having a null-check on conf and nothing else assigns to conf in the startup process.

review: Needs Fixing
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

> Ah, I didn't make the non-nit part of that review clear:
>
> Non-nit:
> mir_demo_client_display_config crashes if you press ‘p’ before making any
> display configuration changes, due to print_current_configuration() not having
> a null-check on conf and nothing else assigns to conf in the startup process.

No, that was clear. I failed to push the correction.

Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:4214
https://mir-jenkins.ubuntu.com/job/mir-ci/3509/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4802
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4984
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=artful/4973
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/4973
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4973
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/4839
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/4839/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4839
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4839/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=artful/4839
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=artful/4839/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/4839
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/4839/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4839
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4839/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=artful/4839
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=artful/4839/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/4839
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/4839/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/4839
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/4839/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3509/rebuild

review: Approve (continuous-integration)
Revision history for this message
Chris Halse Rogers (raof) wrote :

Wouldn't it be better to construct the MirDisplayConfig in print_display_configuration() if it's null? As it stands, we document that ‘p’ will print the current configuration, but it only does if you've already changed it?

Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

> Wouldn't it be better to construct the MirDisplayConfig in
> print_display_configuration() if it's null? As it stands, we document that ‘p’
> will print the current configuration, but it only does if you've already
> changed it?

No, if you press 'p' it will print the base configuration whether or not you've changed the base configuration.

Revision history for this message
Chris Halse Rogers (raof) wrote :

Ah, fair enough.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'examples/demo_client_display_config.c'
--- examples/demo_client_display_config.c 2017-05-08 03:04:26 +0000
+++ examples/demo_client_display_config.c 2017-07-25 07:47:20 +0000
@@ -1,7 +1,7 @@
1/*1/*
2 * Client-side display configuration demo.2 * Client-side display configuration demo.
3 *3 *
4 * Copyright © 2013 Canonical Ltd.4 * Copyright © 2013, 2017 Canonical Ltd.
5 *5 *
6 * This program is free software: you can redistribute it and/or modify6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 3 as7 * it under the terms of the GNU General Public License version 3 as
@@ -37,7 +37,11 @@
37 configuration_mode_clone,37 configuration_mode_clone,
38 configuration_mode_horizontal,38 configuration_mode_horizontal,
39 configuration_mode_vertical,39 configuration_mode_vertical,
40 configuration_mode_single40 configuration_mode_single,
41 configuration_mode_left,
42 configuration_mode_right,
43 configuration_mode_up,
44 configuration_mode_down,
41} ConfigurationMode;45} ConfigurationMode;
4246
43struct ClientContext47struct ClientContext
@@ -49,9 +53,13 @@
49 volatile sig_atomic_t reconfigure;53 volatile sig_atomic_t reconfigure;
50};54};
5155
52static void print_current_configuration(MirConnection *connection)56static MirDisplayConfig *conf = NULL;
57
58static void print_current_configuration()
53{59{
54 MirDisplayConfig *conf = mir_connection_create_display_configuration(connection);60 if (!conf)
61 return;
62
55 size_t num_outputs = mir_display_config_get_num_outputs(conf);63 size_t num_outputs = mir_display_config_get_num_outputs(conf);
5664
57 for (uint32_t i = 0; i < num_outputs; i++)65 for (uint32_t i = 0; i < num_outputs; i++)
@@ -64,8 +72,8 @@
64 bool connected = mir_output_get_connection_state(output) ==72 bool connected = mir_output_get_connection_state(output) ==
65 mir_output_connection_state_connected;73 mir_output_connection_state_connected;
6674
67 printf("Output id: %d connected: %d used: %d position_x: %d position_y: %d",75 printf("Output id: %d connected: %d used: %d position_x: %d position_y: %d orientation: %d",
68 id, connected, used, position_x, position_y);76 id, connected, used, position_x, position_y, mir_output_get_orientation(output));
6977
70 MirOutputMode const* current = mir_output_get_current_mode(output);78 MirOutputMode const* current = mir_output_get_current_mode(output);
71 if (current)79 if (current)
@@ -80,8 +88,6 @@
80 printf("\n");88 printf("\n");
81 }89 }
82 }90 }
83
84 mir_display_config_release(conf);
85}91}
8692
87static int apply_configuration(MirConnection *connection, MirDisplayConfig *conf)93static int apply_configuration(MirConnection *connection, MirDisplayConfig *conf)
@@ -208,31 +214,67 @@
208 }214 }
209}215}
210216
217static void orient_display(MirDisplayConfig *conf, MirOrientation orientation)
218{
219 size_t num_outputs = mir_display_config_get_num_outputs(conf);
220
221 for (size_t i = 0; i < num_outputs; i++)
222 {
223 MirOutput *output = mir_display_config_get_mutable_output(conf, i);
224 mir_output_set_orientation(output, orientation);
225 }
226}
227
211static void configure_display(struct ClientContext *context, ConfigurationMode mode,228static void configure_display(struct ClientContext *context, ConfigurationMode mode,
212 int mode_data)229 int mode_data)
213{230{
214 MirDisplayConfig *conf =231 if (!conf)
215 mir_connection_create_display_configuration(context->connection);232 conf = mir_connection_create_display_configuration(context->connection);
216233
217 if (mode == configuration_mode_clone)234 switch (mode)
218 {235 {
236 case configuration_mode_clone:
219 configure_display_clone(conf);237 configure_display_clone(conf);
220 printf("Applying clone configuration: ");238 printf("Applying clone configuration: ");
221 }239 break;
222 else if (mode == configuration_mode_vertical)240
223 {241 case configuration_mode_vertical:
224 configure_display_vertical(conf);242 configure_display_vertical(conf);
225 printf("Applying vertical configuration: ");243 printf("Applying vertical configuration: ");
226 }244 break;
227 else if (mode == configuration_mode_horizontal)245
228 {246 case configuration_mode_horizontal:
229 configure_display_horizontal(conf);247 configure_display_horizontal(conf);
230 printf("Applying horizontal configuration: ");248 printf("Applying horizontal configuration: ");
231 }249 break;
232 else if (mode == configuration_mode_single)250
233 {251 case configuration_mode_single:
234 configure_display_single(conf, mode_data);252 configure_display_single(conf, mode_data);
235 printf("Applying single configuration for output %d: ", mode_data);253 printf("Applying single configuration for output %d: ", mode_data);
254 break;
255
256 case configuration_mode_left:
257 orient_display(conf, mir_orientation_left);
258 printf("Applying orientation left: ");
259 break;
260
261 case configuration_mode_right:
262 orient_display(conf, mir_orientation_right);
263 printf("Applying orientation right: ");
264 break;
265
266 case configuration_mode_up:
267 orient_display(conf, mir_orientation_inverted);
268 printf("Applying orientation up: ");
269 break;
270
271 case configuration_mode_down:
272 orient_display(conf, mir_orientation_normal);
273 printf("Applying orientation down: ");
274 break;
275
276 default:
277 break;
236 }278 }
237279
238 if (apply_configuration(context->connection, conf))280 if (apply_configuration(context->connection, conf))
@@ -240,22 +282,33 @@
240 context->mode = mode;282 context->mode = mode;
241 context->mode_data = mode_data;283 context->mode_data = mode_data;
242 }284 }
243
244 mir_display_config_release(conf);
245}285}
246286
247static void display_change_callback(MirConnection *connection, void *context)287static void display_change_callback(MirConnection *connection, void *context)
248{288{
249 (void)context;
250
251 printf("=== Display configuration changed === \n");289 printf("=== Display configuration changed === \n");
252290
253 print_current_configuration(connection);291 if (conf)
292 mir_display_config_release(conf);
293
294 conf = mir_connection_create_display_configuration(connection);
295
296 print_current_configuration();
254297
255 struct ClientContext *ctx = (struct ClientContext*) context;298 struct ClientContext *ctx = (struct ClientContext*) context;
256 ctx->reconfigure = 1;299 ctx->reconfigure = 1;
257}300}
258301
302static void apply_to_base_configuration(MirConnection *connection)
303{
304 if (!conf)
305 return;
306
307 mir_connection_preview_base_display_configuration(connection, conf, 2);
308 puts("Applying to base configuration");
309 mir_connection_confirm_base_display_configuration(connection, conf);
310}
311
259static void handle_keyboard_event(struct ClientContext *ctx, MirKeyboardEvent const* event)312static void handle_keyboard_event(struct ClientContext *ctx, MirKeyboardEvent const* event)
260{313{
261 if (mir_keyboard_event_action(event) != mir_keyboard_action_up)314 if (mir_keyboard_event_action(event) != mir_keyboard_action_up)
@@ -271,6 +324,9 @@
271324
272 switch (key_code)325 switch (key_code)
273 {326 {
327 case XKB_KEY_a:
328 apply_to_base_configuration(ctx->connection);
329 break;
274 case XKB_KEY_q:330 case XKB_KEY_q:
275 ctx->running = 0;331 ctx->running = 0;
276 break;332 break;
@@ -284,7 +340,21 @@
284 configure_display(ctx, configuration_mode_vertical, 0);340 configure_display(ctx, configuration_mode_vertical, 0);
285 break;341 break;
286 case XKB_KEY_p:342 case XKB_KEY_p:
287 print_current_configuration(ctx->connection);343 if (!conf)
344 conf = mir_connection_create_display_configuration(ctx->connection);
345 print_current_configuration();
346 break;
347 case XKB_KEY_Left:
348 configure_display(ctx, configuration_mode_right, 0);
349 break;
350 case XKB_KEY_Up:
351 configure_display(ctx, configuration_mode_up, 0);
352 break;
353 case XKB_KEY_Right:
354 configure_display(ctx, configuration_mode_left, 0);
355 break;
356 case XKB_KEY_Down:
357 configure_display(ctx, configuration_mode_down, 0);
288 break;358 break;
289 }359 }
290}360}
@@ -292,15 +362,16 @@
292static void event_callback(362static void event_callback(
293 MirWindow* surface, MirEvent const* event, void* context)363 MirWindow* surface, MirEvent const* event, void* context)
294{364{
295 (void) surface;365 mir_eglapp_handle_event(surface, event, context);
366
296 struct ClientContext *ctx = (struct ClientContext*) context;367 struct ClientContext *ctx = (struct ClientContext*) context;
297 368
298 if (mir_event_get_type(event) != mir_event_type_input)369 if (mir_event_get_type(event) != mir_event_type_input)
299 return;370 return;
300 MirInputEvent const* input_event = mir_event_get_input_event(event);371 MirInputEvent const* input_event = mir_event_get_input_event(event);
301 if (mir_input_event_get_type(input_event) != mir_input_event_type_key)372 if (mir_input_event_get_type(input_event) != mir_input_event_type_key)
302 return;373 return;
303 374
304 handle_keyboard_event(ctx, mir_input_event_get_keyboard_event(input_event));375 handle_keyboard_event(ctx, mir_input_event_get_keyboard_event(input_event));
305}376}
306377
@@ -317,7 +388,9 @@
317 " h: arrange outputs horizontally in the virtual space\n"388 " h: arrange outputs horizontally in the virtual space\n"
318 " v: arrange outputs vertically in the virtual space\n"389 " v: arrange outputs vertically in the virtual space\n"
319 " 1-9: enable only the Nth connected output (in the order returned by the hardware)\n"390 " 1-9: enable only the Nth connected output (in the order returned by the hardware)\n"
320 " p: print current display configuration\n");391 " Arrows: orient display (sets \"down\" direction)\n"
392 " p: print current display configuration\n"
393 " a: apply current display configuration globally\n");
321394
322 return 1;395 return 1;
323 }396 }
@@ -351,6 +424,9 @@
351 }424 }
352 }425 }
353426
427 if (conf)
428 mir_display_config_release(conf);
429
354 mir_eglapp_cleanup();430 mir_eglapp_cleanup();
355431
356 return 0;432 return 0;

Subscribers

People subscribed via source and target branches