void HandleMiniScreenButtonPressEvent(object o, ButtonPressEventArgs args)
        {
            if (args.Event.Button == 3)
            {
                MiniScreenSettings();
            }
            else
            {
                //Console.WriteLine("Press");
                Llista_Punts.Clear();
                int    px, py;                                                  // Posició de la minipantalla
                int    miniscreen_size_x, miniscreen_size_y;                    // dimensions de la minipantalla
                double pos_mouse_x, pos_mouse_y;                                // posició del ratolí en el clic
                double pos_mouse_x_global, pos_mouse_y_global;                  // posició del ratolí en el clic referent al global de pa pantalla

                // Agafem les dimensions de la minipantalla
                MiniScreen.GetSizeRequest(out miniscreen_size_x, out miniscreen_size_y);

                // Agafem la posició del ratolí en el moment del clic
                pos_mouse_x = args.Event.X;
                pos_mouse_y = args.Event.Y;

                // Agafem la posició de la finestra
                //Gdk.Window root=Gdk.Global.ActiveWindow;
                //root.GetPosition(out px, out py);
                //LliureXMiniScreen.MainClass.win.GetPosition(out px, out py);
                LliureXMiniScreen.Core.getCore().win.GetPosition(out px, out py);

                // Posició global del ratolí en el clic (recalculada)
                pos_mouse_x_global = pos_mouse_x * ScreenWidth / this.MiniScreenWidth;
                pos_mouse_y_global = pos_mouse_y * ScreenHeight / this.MiniScreenHeight;

                // Mostrem la informació
                Console.WriteLine("Screen From: (" + px + "," + py + ") to (" + (px + miniscreen_size_x) + "," + (py + miniscreen_size_y) + ")");
                Console.WriteLine("Pointer at: (" + pos_mouse_x + "," + pos_mouse_y + ")");
                Console.WriteLine("Pointer at: (" + pos_mouse_x_global + "," + pos_mouse_y_global + ")");

                // Controlem si el clic és dins de la seua finestra de miniscreen

                if (pos_mouse_x_global > px && pos_mouse_x_global < px + miniscreen_size_x &&
                    pos_mouse_y_global > py && pos_mouse_y_global < py + miniscreen_size_y)
                {
                    Console.WriteLine("ESTA DINS!!!");
                    Init();
                }
                else
                {
                    if (args.Event.Button == 1)                  // Si el botó era l'1...
                    {
                        BtnPressed = true;                       // Indiquem que el botó està polsat
                        Llista_Punts.Add(new Gdk.Point((int)pos_mouse_x, (int)pos_mouse_y));
                    }
                }
            }
        }
        private bool DrawPreview()
        {
            Console.WriteLine(OldRefreshRate + "--------" + RefreshRate);

            if (OldRefreshRate == RefreshRate)
            {
                if (!moving_mouse)
                {
                    Console.WriteLine("Drawing with ref rate..." + RefreshRate);

                    int width  = 0;
                    int height = 0;

                    if (!BtnPressed)
                    {
                        try{
                            root = Gdk.Global.DefaultRootWindow;

                            // get its width and height
                            root.GetSize(out width, out height);
                            // create a new pixbuf from the root window
                            //try{
                            //LliureXMiniScreen.Core.getCore().win.Hide();
                            screenshot = Gdk.Pixbuf.FromDrawable(root, root.Colormap, 0, 0, 0, 0, width, height);

                            int miniscreen_size_x, miniscreen_size_y;                                   // dimensions de la minipantalla
                            int px, py, win_px, win_py;
                            if (LliureXMiniScreen.Core.getCore().win != null)
                            {
                                LliureXMiniScreen.Core.getCore().win.GetPosition(out win_px, out win_py);
                                MiniScreen.GetSizeRequest(out miniscreen_size_x, out miniscreen_size_y);
                                px = MiniScreenPosition * (width - miniscreen_size_x);
                                py = height - miniscreen_size_y;

                                Console.WriteLine("Dibuixe en: (" + px + "," + py + ") una finestra de " + miniscreen_size_x + "x" + miniscreen_size_y);
                                if (px != win_px || py != win_py)
                                {
                                    LliureXMiniScreen.Core.getCore().win.Move(px, py);
                                }

                                // Amaguem la minipantallla

                                // PATCH
                                //Gdk.Pixbuf HiddenMiniScreen=new Pixbuf("/usr/share/icons/LliureX-Accessibility/llx-miniscreen-hide.png", miniscreen_size_x, miniscreen_size_y);
                                HiddenMiniScreen = new Pixbuf(InitScreenshot, px, py, MiniScreenWidth, MiniScreenHeight);

                                // END PATCH

                                Console.WriteLine("->" + HiddenMiniScreen.Width + " " + HiddenMiniScreen.Height);
                                HiddenMiniScreen = HiddenMiniScreen.ScaleSimple(miniscreen_size_x, miniscreen_size_y, InterpType.Bilinear);
                                HiddenMiniScreen.CopyArea(0, 0, miniscreen_size_x, miniscreen_size_y,
                                                          screenshot, px, py);
                            }

                            //LliureXMiniScreen.Core.getCore().win.Activate();
                            //	LliureXMiniScreen.Core.getCore().win.Show();

                            /*} catch (Exception exc){
                             *      Console.WriteLine("Excepció...: "+exc);
                             * }*/

                            //Gdk.Pixbuf screenshot = Gdk.Pixbuf.FromDrawable(root, root.Colormap, 0,0, 0,0, width, height);
                            //
                            // Cal inserir una imatge al screenshot per poder ocultar la minifinestra a la captura!!!
                            //
                            screenshot = screenshot.ScaleSimple(this.MiniScreenWidth, this.MiniScreenHeight, InterpType.Bilinear);
                        }catch (Exception exc) {
                            Console.WriteLine("Excepció...: " + exc);
                        }
                    }

                    // Creem la imatge per emmagatzemar el pixbuf

                    Gtk.Image MyImage = new Gtk.Image();
                    MyImage.Pixbuf = screenshot;

                    // Agafem les dimensions de la finestra
                    Gdk.GC gc = ((Gtk.DrawingArea)MiniScreen).Style.TextGC(Gtk.StateType.Normal);

                    MiniScreen.GdkWindow.DrawPixbuf(gc, MyImage.Pixbuf, 0, 0, 0, 0, this.MiniScreenWidth, this.MiniScreenHeight, Gdk.RgbDither.Max, 0, 0);

                    Cairo.Context context = Gdk.CairoHelper.Create(MiniScreen.GdkWindow);

                    if (BtnPressed)
                    {
                        double r = double.Parse((PathColor.Red).ToString()) / 65535;
                        double g = double.Parse((PathColor.Green).ToString()) / 65535;
                        double b = double.Parse((PathColor.Blue).ToString()) / 65535;

                        context.Color = new Cairo.Color(r, g, b);

                        try{
                            if (Llista_Punts.Count > 1)
                            {
                                context.LineWidth = 3;
                                context.MoveTo(Llista_Punts[0].X, Llista_Punts[0].Y);
                                foreach (Gdk.Point p in Llista_Punts)
                                {
                                    context.LineTo(p.X, p.Y);
                                    context.MoveTo(p.X, p.Y);
                                }
                            }
                            context.Stroke();
                            context.FillPreserve();
                        }

                        catch (Exception ex) {
                            Console.WriteLine("Exception: " + ex.Message);
                        }
                    }

                    ((IDisposable)context.Target).Dispose();
                    ((IDisposable)context).Dispose();


                    return(true);
                }
            }
            else
            {
                //if(RefreshRate!=OldRefreshRate){
                Console.WriteLine("Change refresg rate!!!");
                OldRefreshRate = RefreshRate;
                return(false);
                //}
            }
            return(false);
        }
        void HandleEventbox1ButtonReleaseEvent(object o, ButtonReleaseEventArgs args)
        {
            moving_mouse = true;           // Indiquem que s'està movent el ratolí (per tant no redibuixarem)
            //Console.WriteLine("RELEASEEE!!!");

            int    px, py;                                 // Posició de la minipantalla
            int    miniscreen_size_x, miniscreen_size_y;   // dimensions de la minipantalla
            double pos_mouse_x, pos_mouse_y;               // posició del ratolí en el clic
            double pos_mouse_x_global, pos_mouse_y_global; // posició del ratolí en el clic referent al global de pa pantalla

            /*line_x0=0; // Amaguem la línia
             * line_y0=0;
             * line_xf=0;
             * line_yf=0;*/

            // Agafem les dimensions de la minipantalla
            MiniScreen.GetSizeRequest(out miniscreen_size_x, out miniscreen_size_y);

            // Agafem la posició del ratolí en el moment del release
            pos_mouse_x = args.Event.X;
            pos_mouse_y = args.Event.Y;

            // Afegim a la llista la última posició
            Llista_Punts.Add(new Gdk.Point((int)pos_mouse_x, (int)pos_mouse_y));

            // Agafem la posició de la finestra
            //Gdk.Window root=Gdk.Global.ActiveWindow;
            //root.GetPosition(out px, out py);
            //LliureXMiniScreen.MainClass.win.GetPosition(out px, out py);
            LliureXMiniScreen.Core.getCore().win.GetPosition(out px, out py);



            // Posició global del ratolí en el clic (recalculada)
            pos_mouse_x_global = pos_mouse_x * ScreenWidth / this.MiniScreenWidth;
            pos_mouse_y_global = pos_mouse_y * ScreenHeight / this.MiniScreenHeight;

            // Mostrem la informació
            Console.WriteLine("RELEASE: Screen From: (" + px + "," + py + ") to (" + (px + miniscreen_size_x) + "," + (py + miniscreen_size_y) + ")");
            Console.WriteLine("RELEASE: Pointer at: (" + pos_mouse_x + "," + pos_mouse_y + ")");
            Console.WriteLine("RELEASE: Pointer at: (" + pos_mouse_x_global + "," + pos_mouse_y_global + ")");

            if (args.Event.Button == 1)           // Si el botó era l'1...
            // Movem el ratolí en funció de la llista...

            {
                Console.WriteLine("N PUNTS: " + Llista_Punts.Count);
                if (Llista_Punts.Count > 3)
                {
                    //Console.WriteLine("N PUNT 1: "+Llista_Punts[0].X+","+Llista_Punts[0].Y);
                    //Console.WriteLine("N PUNT 2: "+Llista_Punts[1].X+","+Llista_Punts[1].Y);
                    //Console.WriteLine("N PUNT 3: "+Llista_Punts[2].X+","+Llista_Punts[2].Y);


                    Process p = new Process();
                    p.StartInfo.FileName = "xdotool";

                    // Alliberem el ratolí
                    //	p.StartInfo.Arguments = " mouseup 1  ";
                    //	p.Start();
                    //	p.WaitForExit();



                    // DESACTIVEM ELS RATOLINS // PATCH 2012
                    foreach (String [] device in Input_Devices_List)
                    {
                        ExecuteCommandSync("xinput", "set-prop " + device[0] + " " + device[1] + " 0");
                    }



                    Console.WriteLine("Posicionant en: " + Llista_Punts[0].X * ScreenWidth / this.MiniScreenWidth + " " + Llista_Punts[0].Y * ScreenHeight / this.MiniScreenHeight);
                    p.StartInfo.Arguments = " mousemove  " + Llista_Punts[0].X * ScreenWidth / this.MiniScreenWidth + " " + Llista_Punts[0].Y * ScreenHeight / this.MiniScreenHeight;
                    p.Start();
                    p.WaitForExit();



                    // Click inicial:
                    p.StartInfo.Arguments = " mousedown 1 ";
                    p.Start();
                    p.WaitForExit();

                    foreach (Gdk.Point pt in Llista_Punts)
                    {
                        Console.WriteLine("Movint to: " + pt.X * ScreenWidth / this.MiniScreenWidth + " " + pt.Y * ScreenHeight / this.MiniScreenHeight);
                        p.StartInfo.Arguments = " mousemove  " + pt.X * ScreenWidth / this.MiniScreenWidth + " " + pt.Y * ScreenHeight / this.MiniScreenHeight;
                        p.Start();
                        p.WaitForExit();
                    }
                    p.StartInfo.Arguments = " mouseup 1  ";
                    p.Start();
                    p.WaitForExit();


                    // Reposicionament del ratolí en la minipantalla
                    double finalx, finaly;
                    finalx = px + pos_mouse_x;
                    finaly = py + pos_mouse_y;

                    Console.WriteLine("px: " + px + " pos_mouse_x: " + pos_mouse_x);
                    Console.WriteLine("px: " + py + " pos_mouse_x: " + pos_mouse_y);


                    p.StartInfo.Arguments = "mousemove " + finalx + " " + finaly;


                    p.Start();
                    p.WaitForExit();
                    p.Close();

                    Llista_Punts.Clear();


                    // REACTIVEM EL RATOLI // PATCH 2012
                    foreach (String [] device in Input_Devices_List)
                    {
                        ExecuteCommandSync("xinput", "set-prop " + device[0] + " " + device[1] + " 1");
                    }
                }
                else
                {
                    // Si només hi ha un clic...
                    if (Llista_Punts.Count > 0)
                    {
                        Console.WriteLine("Click*****************************");

                        Process p = new Process();
                        p.StartInfo.FileName = "xdotool";

                        // Alliberem el ratolí
                        //p.StartInfo.Arguments = " mouseup 1  ";
                        //p.Start();
                        //p.WaitForExit();

                        Console.WriteLine("Movint INIT to: " + Llista_Punts[0].X * ScreenWidth / this.MiniScreenWidth + " " + Llista_Punts[0].Y * ScreenHeight / this.MiniScreenHeight);
                        p.StartInfo.Arguments = " mousemove  " + Llista_Punts[0].X * ScreenWidth / this.MiniScreenWidth + " " + Llista_Punts[0].Y * ScreenHeight / this.MiniScreenHeight;
                        p.Start();
                        p.WaitForExit();

                        // Click:
                        p.StartInfo.Arguments = " click 1 ";
                        p.Start();
                        p.WaitForExit();

                        // Reposicionament del ratolí en la minipantalla
                        double finalx, finaly;
                        finalx = px + pos_mouse_x;
                        finaly = py + pos_mouse_y;

                        p.StartInfo.Arguments = "mousemove " + finalx + " " + finaly;

                        p.Start();
                        p.WaitForExit();
                        p.Close();
                        Llista_Punts.Clear();
                    }
                }

                // Restaurem el botó
            }
            BtnPressed   = false;         // Alliberem el botó es faça on es faça
            moving_mouse = false;         // Hem acabat de mouse el ratoló, podem redibuixar
        }