communication: block the Alt+F4 event for a while 61/16561/2
authorGiWoong Kim <giwoong.kim@samsung.com>
Fri, 14 Feb 2014 09:35:32 +0000 (18:35 +0900)
committerSangho Park <sangho1206.park@samsung.com>
Fri, 21 Feb 2014 04:10:25 +0000 (20:10 -0800)
When short cut(Alt+F4) key repeating, block the event for a while

Change-Id: I781b5be4b40600c95f6ece2324c20bb40f560994
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java

index 404d9477bbaf5ab4821ba075fa83b5404b7ea2fa..b5ec0c17854dec9aae4635a4ca2ca87228c8189b 100755 (executable)
@@ -37,6 +37,9 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map.Entry;
 import java.util.Random;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -164,6 +167,7 @@ public class EmulatorSkin {
        public ScreenShotDialog screenShotDialog;
 
        public SocketCommunicator communicator;
+       private AtomicBoolean demanderFlag = new AtomicBoolean(false);
        private ShellListener shellListener;
        private MenuDetectListener shellMenuDetectListener;
 
@@ -469,14 +473,32 @@ public class EmulatorSkin {
 
                                        skinFinalize();
                                } else {
-                                       /*
-                                        * Skin have to be alive until receiving shutdown request
-                                        * from qemu
-                                        */
+                                       /* Skin have to be alive until receiving shutdown request from qemu */
                                        event.doit = false;
 
-                                       if (null != communicator) {
-                                               communicator.sendToQEMU(SendCommand.SEND_CLOSE_REQ, null, false);
+                                       if (pressedKeyEventList.isEmpty() == true
+                                                       && demanderFlag.compareAndSet(false, true)) {
+                                               if (null != communicator) {
+                                                       communicator.sendToQEMU(
+                                                                       SendCommand.SEND_CLOSE_REQ, null, false);
+                                               }
+
+                                               /* block for a while */
+                                               try {
+                                                       /* In Close emulation,
+                                                        * 1000ms parameter was used for sleep function.
+                                                        * So, we need a bigger value than that.*/
+                                                       new Timer().schedule(new TimerTask() {
+                                                               @Override
+                                                               public void run() {
+                                                                       demanderFlag.set(false);
+                                                               }
+                                                       }, 1500);
+                                               } catch (IllegalArgumentException e) {
+                                                       logger.log(Level.SEVERE, e.getMessage(), e);
+                                               }
+                                       } else {
+                                               logger.info("skip close request");
                                        }
                                }
                        }