op_runfbapp: handle scaler layer on minimize
authorGrazvydas Ignotas <notasas@gmail.com>
Thu, 17 Jan 2013 23:48:36 +0000 (01:48 +0200)
committerGrazvydas Ignotas <notasas@gmail.com>
Thu, 17 Jan 2013 23:48:36 +0000 (01:48 +0200)
Fixes minimize for Temper.

op_runfbapp.c

index 2226827..4a5abb3 100644 (file)
@@ -43,6 +43,9 @@
 #include <signal.h>
 #include <linux/kd.h>
 
 #include <signal.h>
 #include <linux/kd.h>
 
+#define __user
+#include "omapfb.h"
+
 #define PFX "op_runfbapp: "
 
 static struct termios g_kbd_termios_saved;
 #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");
 }
 
        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;
 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;
        XEvent evt;
        Display *display;
        int screen;
+       int ret;
 
        display = XOpenDisplay(NULL);
        if (display == NULL)
 
        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);
                        if (XLookupKeysym(&evt.xkey, 0) == XF86XK_MenuKB
                            && g_child_pid != 0) {
                                kill(g_child_pid, SIGSTOP);
+
+                               ret = hide_omap_layer();
                                x11h_minimize(display, win);
                                x11h_minimize(display, win);
+                               if (ret > 0)
+                                       show_omap_layer();
+
                                kill(g_child_pid, SIGCONT);
                        }
                        break;
                                kill(g_child_pid, SIGCONT);
                        }
                        break;