chiark / gitweb /
treewide: use log_*_errno whenever %m is in the format string
[elogind.git] / src / libsystemd-terminal / modeset.c
index c1119c9e0fde6f366df7b569a563bbff2fbe787b..f7bcbb2914890102ed7501de6f9ef96a56d84cda 100644 (file)
@@ -146,16 +146,12 @@ static int modeset_new(Modeset **out) {
                 return log_oom();
 
         r = sd_pid_get_session(getpid(), &m->session);
-        if (r < 0) {
-                log_error("Cannot retrieve logind session: %s", strerror(-r));
-                return r;
-        }
+        if (r < 0)
+                return log_error_errno(r, "Cannot retrieve logind session: %m");
 
         r = sd_session_get_seat(m->session, &m->seat);
-        if (r < 0) {
-                log_error("Cannot retrieve seat of logind session: %s", strerror(-r));
-                return r;
-        }
+        if (r < 0)
+                return log_error_errno(r, "Cannot retrieve seat of logind session: %m");
 
         m->my_tty = is_my_tty(m->session);
         m->managed = m->my_tty && geteuid() > 0;
@@ -234,18 +230,18 @@ static void modeset_draw(Modeset *m, const grdev_display_target *t) {
         uint32_t j, k, *b;
         uint8_t *l;
 
-        assert(t->fb->format == DRM_FORMAT_XRGB8888 || t->fb->format == DRM_FORMAT_ARGB8888);
+        assert(t->back->format == DRM_FORMAT_XRGB8888 || t->back->format == DRM_FORMAT_ARGB8888);
         assert(!t->rotate);
         assert(!t->flip);
 
-        l = t->fb->maps[0];
+        l = t->back->maps[0];
         for (j = 0; j < t->height; ++j) {
                 for (k = 0; k < t->width; ++k) {
                         b = (uint32_t*)l;
                         b[k] = (0xff << 24) | (m->r << 16) | (m->g << 8) | m->b;
                 }
 
-                l += t->fb->strides[0];
+                l += t->back->strides[0];
         }
 }
 
@@ -256,9 +252,9 @@ static void modeset_render(Modeset *m, grdev_display *d) {
         m->g = next_color(&m->g_up, m->g, 3);
         m->b = next_color(&m->b_up, m->b, 2);
 
-        GRDEV_DISPLAY_FOREACH_TARGET(d, t, 0) {
+        GRDEV_DISPLAY_FOREACH_TARGET(d, t) {
                 modeset_draw(m, t);
-                grdev_display_flip_target(d, t, 1);
+                grdev_display_flip_target(d, t);
         }
 
         grdev_session_commit(m->grdev_session);
@@ -270,12 +266,10 @@ static void modeset_grdev_fn(grdev_session *session, void *userdata, grdev_event
         switch (ev->type) {
         case GRDEV_EVENT_DISPLAY_ADD:
                 grdev_display_enable(ev->display_add.display);
-                modeset_render(m, ev->display_add.display);
                 break;
         case GRDEV_EVENT_DISPLAY_REMOVE:
                 break;
         case GRDEV_EVENT_DISPLAY_CHANGE:
-                modeset_render(m, ev->display_change.display);
                 break;
         case GRDEV_EVENT_DISPLAY_FRAME:
                 modeset_render(m, ev->display_frame.display);
@@ -311,17 +305,13 @@ static int modeset_sysview_fn(sysview_context *c, void *userdata, sysview_event
                                       name,
                                       modeset_grdev_fn,
                                       m);
-                if (r < 0) {
-                        log_error("Cannot create grdev session: %s", strerror(-r));
-                        return r;
-                }
+                if (r < 0)
+                        return log_error_errno(r, "Cannot create grdev session: %m");
 
                 if (m->managed) {
                         r = sysview_session_take_control(ev->session_add.session);
-                        if (r < 0) {
-                                log_error("Cannot request session control: %s", strerror(-r));
-                                return r;
-                        }
+                        if (r < 0)
+                                return log_error_errno(r, "Cannot request session control: %m");
                 }
 
                 grdev_session_enable(m->grdev_session);
@@ -334,7 +324,8 @@ static int modeset_sysview_fn(sysview_context *c, void *userdata, sysview_event
                 grdev_session_restore(m->grdev_session);
                 grdev_session_disable(m->grdev_session);
                 m->grdev_session = grdev_session_free(m->grdev_session);
-                sd_event_exit(m->event, 0);
+                if (sd_event_get_exit_code(m->event, &r) == -ENODATA)
+                        sd_event_exit(m->event, 0);
                 break;
         case SYSVIEW_EVENT_SESSION_ATTACH:
                 d = ev->session_attach.device;
@@ -349,17 +340,22 @@ static int modeset_sysview_fn(sysview_context *c, void *userdata, sysview_event
                 if (type == SYSVIEW_DEVICE_DRM)
                         grdev_session_remove_drm(m->grdev_session, sysview_device_get_ud(d));
 
+                break;
+        case SYSVIEW_EVENT_SESSION_REFRESH:
+                d = ev->session_refresh.device;
+                type = sysview_device_get_type(d);
+                if (type == SYSVIEW_DEVICE_DRM)
+                        grdev_session_hotplug_drm(m->grdev_session, ev->session_refresh.ud);
+
                 break;
         case SYSVIEW_EVENT_SESSION_CONTROL:
                 r = ev->session_control.error;
-                if (r < 0) {
-                        log_error("Cannot acquire session control: %s", strerror(-r));
-                        return r;
-                }
+                if (r < 0)
+                        return log_error_errno(r, "Cannot acquire session control: %m");
 
                 r = ioctl(1, KDSKBMODE, K_UNICODE);
                 if (r < 0) {
-                        log_error("Cannot set K_UNICODE on stdout: %m");
+                        log_error_errno(errno, "Cannot set K_UNICODE on stdout: %m");
                         return -errno;
                 }
 
@@ -474,7 +470,7 @@ int main(int argc, char *argv[]) {
         log_parse_environment();
         log_open();
 
-        srand(time(NULL));
+        initialize_srand();
 
         r = parse_argv(argc, argv);
         if (r <= 0)