From 7f0df40a68cbd7f4b319bf334f16e2c3c344dc59 Mon Sep 17 00:00:00 2001 From: Grazvydas Ignotas Date: Fri, 18 Jan 2013 01:48:36 +0200 Subject: [PATCH] op_runfbapp: handle scaler layer on minimize Fixes minimize for Temper. --- op_runfbapp.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/op_runfbapp.c b/op_runfbapp.c index 2226827..4a5abb3 100644 --- a/op_runfbapp.c +++ b/op_runfbapp.c @@ -43,6 +43,9 @@ #include #include +#define __user +#include "omapfb.h" + #define PFX "op_runfbapp: " static struct termios g_kbd_termios_saved; @@ -92,6 +95,63 @@ static void x11h_wait_vmstate(Display *display) fprintf(stderr, "timeout waiting for wm_state change\n"); } +static struct omapfb_plane_info omap_pi; + +static int hide_omap_layer(void) +{ + int retval = -1; + int ret; + int fd; + + fd = open("/dev/fb1", O_RDWR); + if (fd == -1) { + perror("open(/dev/fb1)"); + return -1; + } + + ret = ioctl(fd, OMAPFB_QUERY_PLANE, &omap_pi); + if (ret != 0) { + perror("QUERY_PLANE"); + goto out; + } + + if (omap_pi.enabled) { + omap_pi.enabled = 0; + ret = ioctl(fd, OMAPFB_SETUP_PLANE, &omap_pi); + if (ret != 0) { + perror("SETUP_PLANE"); + goto out; + } + retval = 1; + } + else { + retval = 0; + } + +out: + close(fd); + return retval; +} + +static void show_omap_layer(void) +{ + int ret; + int fd; + + fd = open("/dev/fb1", O_RDWR); + if (fd == -1) { + perror("open(/dev/fb1)"); + return; + } + + omap_pi.enabled = 1; + ret = ioctl(fd, OMAPFB_SETUP_PLANE, &omap_pi); + if (ret != 0) + perror("SETUP_PLANE"); + + close(fd); +} + static int x11h_minimize(Display *display, Window window) { XSetWindowAttributes attributes; @@ -158,6 +218,7 @@ static void *x11_handler(void *arg) XEvent evt; Display *display; int screen; + int ret; display = XOpenDisplay(NULL); if (display == NULL) @@ -207,7 +268,12 @@ static void *x11_handler(void *arg) if (XLookupKeysym(&evt.xkey, 0) == XF86XK_MenuKB && g_child_pid != 0) { kill(g_child_pid, SIGSTOP); + + ret = hide_omap_layer(); x11h_minimize(display, win); + if (ret > 0) + show_omap_layer(); + kill(g_child_pid, SIGCONT); } break; -- 2.39.2