亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xutil.cpp

?? 一個3D桌面的實現源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
////  Copyright (C) 2002 Brad Wasson <bard@systemtoolbox.com>////  This file is part of 3ddesktop.////  3ddesktop is free software; you can redistribute it and/or modify it//  under the terms of the GNU General Public License as published by//  the Free Software Foundation; either version 2, or (at your option)//  any later version.////  3ddesktop is distributed in the hope that it will be useful, but//  WITHOUT ANY WARRANTY; without even the implied warranty of//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the//  GNU General Public License for more details.////  You should have received a copy of the GNU General Public License//  along with 3ddesktop; see the file COPYING.   If not, write to//  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.////  ------- //  This is based very directly off of STPH by Rob Hodges.  I just//  ripped out only what I needed becase there was a lot of extra//  stuff there.  Thanks Rob!//#include "3ddesk.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdarg.h>#include "xutil.hpp"#include "util.h"#include <X11/Xlib.h>#include <X11/Xatom.h>#include <X11/Xutil.h>#include <X11/Xresource.h>#include <X11/extensions/xf86vmode.h>#include <X11/keysym.h>Bool error_handler_hit = False;static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error);int VDesktops::init(Config *_cfg){    cfg = _cfg;    display = XOpenDisplay(NULL); /* Posix-compliant systems should behave sensibly with NULL here; */    if (display == NULL) {          /* but probably we should try harder for those that don't... */        msgout (ERROR, "Can not open display!\n");        return -1;    }#ifdef HAVE_KDE    int fake_argc = 1;    char *fake_argv[] = { "3ddeskd", NULL };    // FIXME: use destructor to delete!    // need to call this for the KWin calls to work    ka = new KApplication(display, fake_argc, fake_argv, "3ddesktop"); //main_argc, main_argv, "3ddesktop");#endif    screen = DefaultScreen(display);        root_win = RootWindow(display,screen);    XSetErrorHandler(ignore_all_errors_ehandler);    return 0;}void VDesktops::get_vdesktop_info (int *column, int *row,                                    int *n_columns, int *n_rows){    int c = 0, r = 0, nc = 0, nr = 0;#ifdef HAVE_KDE    if (cfg->use_kde) {        c = KWin::currentDesktop() - 1;	nc = KWin::numberOfDesktops();        nr = 1;    } else #endif // HAVE_KDE    if (cfg->sawfish_only) {        msgout(DEBUG, "vdesktops: sawfish only\n");        c = sawfish_get_current_workspace();        nc = sawfish_get_workspace_count();        nr = 1;    } else if (cfg->use_ewmh) {        msgout (DEBUG, "vdesktops: EWMH\n");        struct gnome_workspace_info wi;        ewmh_get_desktop_info (&wi);        c = wi.workspace;        nc = wi.workspace_count;        nr = 1;    } else if (cfg->use_viewareas) {        msgout(DEBUG, "vdesktops: areas\n");        struct gnome_area_info ai;        gnome_get_area_info(&ai);        c = ai.harea;        r = ai.varea;        nc = ai.harea_count;        nr = ai.varea_count;        if (nc == 1 && nr == 1 && cfg->use_workspaces) {            // try workspaces            struct gnome_workspace_info wi;            gnome_get_workspace_info (&wi);            c = wi.workspace;            nc = wi.workspace_count;            nr = 1;            if (nc <= 1)                 msgout (ERROR, "Could not find more then one virtual desktop!\n");        } else             cfg->use_workspaces = 0;            } else if (cfg->use_workspaces) {        msgout(DEBUG, "vdesktops: workspaces only\n");        struct gnome_workspace_info wi;        gnome_get_workspace_info (&wi);        c = wi.workspace;        nc = wi.workspace_count;        nr = 1;    } else {        // this is the default - make a best guess - ewmh, areas, workspaces        msgout (DEBUG, "vdesktops: making best guess...\n");        struct gnome_workspace_info wi;        ewmh_get_desktop_info (&wi);        c = wi.workspace;        nc = wi.workspace_count;        nr = 1;        if (nc == 1) {            struct gnome_area_info ai;            gnome_get_area_info(&ai);            c = ai.harea;            r = ai.varea;            nc = ai.harea_count;            nr = ai.varea_count;                    if (nc == 1 && nr == 1) {                // columns and rows is from workspaces                struct gnome_workspace_info wi;                gnome_get_workspace_info (&wi);                c = wi.workspace;                nc = wi.workspace_count;                nr = 1;                if (nc > 1) cfg->use_workspaces = 1;                else msgout (ERROR, "Could not find more then one virtual desktop!\n");            } else                 cfg->use_viewareas = 1;                        } else             cfg->use_ewmh = 1;                 }    msgout (DEBUG, "c=%d, r=%d, nc=%d, nr=%d\n",             c, r, nc, nr);    if (column)    *column = c;    if (row)       *row = r;    if (n_columns) *n_columns = nc;    if (n_rows)    *n_rows = nr;}int VDesktops::get_current_desktop (int *column, int *row){    get_vdesktop_info (column, row, 0, 0);    return 0;}int VDesktops::get_row_col_info (int *n_columns, int *n_rows){    get_vdesktop_info (0, 0, n_columns, n_rows);    return 0;}void VDesktops::set_vdesktop (int col, int row){#ifdef HAVE_KDE    if (cfg->use_kde) {        KWin::setCurrentDesktop(col + 1);        msgout (DEBUG, "vdesktops: switching to %d\n", col + 1);        XSync(display, 0);    } else #endif  // HAVE_KDE    if (cfg->sawfish_only) {        //msgout(DEBUG, "vdesktops: sawfish only\n");        sawfish_set_current_workspace (col);    } else if (cfg->use_workspaces) {        //msgout(DEBUG, "vdesktops: workspaces only\n");        gnome_set_current_workspace (col);    } else if (cfg->use_ewmh) {        ewmh_set_current_desktop (col);    } else if (cfg->use_viewareas) {        //msgout(DEBUG, "vdesktops: areas\n");        gnome_set_current_area (col, row);    } else {        msgout (DEBUG, "vdesktops: set: no type predetermined.\n");        gnome_set_current_area (col, row);            }}#if 0//===========================// pwm//===========================int VDesktops::pwm_get_current_workspace (void){    char *val;    long length;    Atom type;    int size;    Atom workspace_atom;    int ws;        workspace_atom = XInternAtom(display, "_PWM_WORKSPACE_NUM", False);    if (Get_Window_Property(display, root_win, workspace_atom,                            &length, &type, &size, &val))     {        msgout(ERROR, "get property PWM_WORKSPACE_NUM failed - setting one\n");        ws = 1;    } else {        ws = ((long *) val)[0];        XFree(val);    }    XSync(display, 0);    return ws;  // pwm has varea hardcoded as one atm}#if 0void VDesktops::pwm_set_current_workspace (int workspace){    int rc;    Atom area_atom;        area_atom = XInternAtom(display, "_PWM_WORKSPACE_NUM", False);        rc = send_client_message_32(display,                                root_win, root_win,                                area_atom,                                SubstructureNotifyMask,                                2,                                workspace,                                CurrentTime);    XSync(display, 0);    return;}#endifvoid VDesktops::pwm_set_current_workspace (int workspace){    CARD32 data[2];        data[0] = workspace;        Atom ws_atom = XInternAtom(display, "_PWM_WORKSPACE_NUM", False);        XChangeProperty(display, root_win, ws_atom, XA_INTEGER,                    32, PropModeReplace, (unsigned char*)data, 1);}int VDesktops::pwm_get_workspace_count (void){    char *val;    long length;    Atom type;    int size;    Atom workspace_atom;    int harea, varea;        workspace_atom = XInternAtom(display, "_PWM_WORKSPACE_INFO", False);    if (Get_Window_Property(display, root_win, workspace_atom,                            &length, &type, &size, &val))     {        msgout(ERROR, "get property PWM_WORKSPACE_INFO failed - setting one\n");        harea = 1;        varea = 1;    } else {        harea = ((long *) val)[0];        varea = ((long *) val)[1];        XFree(val);    }    XSync(display, 0);    return harea;  // pwm has varea hardcoded as one atm}#endif // if 0//===========================// gnome - areas//===========================void VDesktops::gnome_set_current_area (int harea, int varea){    int rc;    Atom area_atom;        area_atom = XInternAtom(display, "_WIN_AREA", False);        rc = send_client_message_32(display,                                root_win, root_win,                                area_atom,                                SubstructureNotifyMask,                                3,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97久久超碰国产精品| 蜜臀久久久久久久| 久久天堂av综合合色蜜桃网| 欧洲一区二区av| 91视频91自| 日本精品一级二级| 日本高清不卡在线观看| 日本高清不卡在线观看| 欧美视频一区二区三区四区| 欧美吻胸吃奶大尺度电影| 欧美日韩中文字幕一区| 欧美少妇一区二区| 欧美一卡在线观看| 欧美大片免费久久精品三p| 日韩欧美卡一卡二| 久久色成人在线| 国产精品久久久久久久久搜平片| 国产精品久久久久三级| 中文字幕日韩av资源站| 亚洲一区av在线| 日韩精品成人一区二区三区 | 国产精品一二三区| 国产成人精品一区二区三区四区 | 蜜臀av性久久久久蜜臀aⅴ流畅| 蜜臀av一区二区| 国产99精品视频| 在线精品视频小说1| 欧美一二三四区在线| 中文字幕不卡的av| 亚洲国产成人tv| 国内久久精品视频| 91同城在线观看| 欧美一级欧美三级在线观看| 国产欧美一区二区精品久导航 | 日韩成人精品在线| 国产suv精品一区二区三区 | 日韩精品一二区| 国产**成人网毛片九色| 欧美日本乱大交xxxxx| 久久久久国产免费免费| 亚洲欧美一区二区三区孕妇| 免费观看久久久4p| 91丨porny丨国产| 精品91自产拍在线观看一区| 一区二区三区中文字幕电影 | 懂色av一区二区三区免费观看| 91福利在线看| 国产午夜亚洲精品理论片色戒 | 91片黄在线观看| 久久久久久一级片| 视频一区欧美精品| 色婷婷久久综合| 中文无字幕一区二区三区 | 99久久综合精品| 欧美xfplay| 丝袜美腿一区二区三区| 99re成人精品视频| 国产清纯在线一区二区www| 日韩国产成人精品| 欧美影院精品一区| 亚洲日本中文字幕区| 国产精品99久久久久久久女警 | 国精产品一区一区三区mba视频 | 欧美日韩一级大片网址| 国产精品美女久久久久久久| 国产专区欧美精品| 精品久久久久久综合日本欧美| 亚洲国产精品综合小说图片区| 99国内精品久久| 国产精品国产成人国产三级| 国产精品18久久久久久久久久久久| 91精品国产乱| 美女任你摸久久| 日韩一区二区在线观看视频| 亚洲国产日韩一区二区| 欧美色大人视频| 亚洲一区二区三区四区不卡| 色拍拍在线精品视频8848| 日韩理论片网站| 色94色欧美sute亚洲线路一ni| 亚洲黄网站在线观看| 日本精品一区二区三区四区的功能| 日韩一区中文字幕| 91久久精品日日躁夜夜躁欧美| 亚洲蜜桃精久久久久久久| 色综合天天做天天爱| 一区二区三区中文字幕在线观看| 欧洲一区二区三区免费视频| 日韩专区在线视频| 欧美电影免费观看高清完整版在线 | 88在线观看91蜜桃国自产| 亚洲成av人影院| 欧美一区二区三区成人| 麻豆精品在线观看| 久久久.com| 91蜜桃在线免费视频| 一区二区三区四区高清精品免费观看| 在线看国产一区| 久久99精品久久久久久国产越南 | 亚洲一级在线观看| 91黄色免费版| 男女视频一区二区| 久久久一区二区| 99精品1区2区| 美女精品自拍一二三四| 国产精品福利影院| 欧美日韩成人高清| 国产精品一二三在| 亚洲国产日韩在线一区模特| 精品国精品国产| 91在线云播放| 精品一区二区三区久久久| 欧美国产日韩在线观看| 欧美久久久久久蜜桃| 国产精品香蕉一区二区三区| 亚洲黄色免费网站| 26uuu国产电影一区二区| 色综合久久久久综合99| 精品一区二区在线观看| 亚洲欧洲综合另类| 国产亚洲欧美日韩俺去了| 欧美伊人久久久久久久久影院 | 99精品热视频| 琪琪久久久久日韩精品| 亚洲美女屁股眼交| 欧美电影免费观看高清完整版| 色狠狠一区二区三区香蕉| 国产高清精品久久久久| 樱桃国产成人精品视频| 久久综合成人精品亚洲另类欧美 | 亚洲美女免费视频| 亚洲在线观看免费| 日本一区二区三区国色天香| 7777精品伊人久久久大香线蕉| av一区二区不卡| 国产老女人精品毛片久久| 亚洲福利一二三区| 有码一区二区三区| 国产精品天干天干在线综合| 久久综合999| 精品国内片67194| 欧美一区二区三级| 欧美男男青年gay1069videost| 一本一本大道香蕉久在线精品| 成人免费av资源| 国产69精品久久99不卡| 国产一区二区三区精品视频| 男女视频一区二区| 美女视频一区在线观看| 六月丁香婷婷色狠狠久久| 日韩中文欧美在线| 热久久免费视频| 免费欧美日韩国产三级电影| 日韩av一二三| 七七婷婷婷婷精品国产| 青青草精品视频| 国产真实乱子伦精品视频| 黄网站免费久久| 国产精品一区专区| 成人黄色网址在线观看| 成人免费电影视频| 91麻豆精品一区二区三区| 一本在线高清不卡dvd| 在线中文字幕不卡| 欧美伦理影视网| 日韩美女视频一区二区在线观看| 日韩一级片网站| 久久色在线视频| 亚洲色图欧洲色图婷婷| 夜色激情一区二区| 日本欧美大码aⅴ在线播放| 美女国产一区二区三区| 国产91综合一区在线观看| av午夜精品一区二区三区| 日本高清无吗v一区| 欧美一区二区三区四区高清| 精品国产乱码久久久久久牛牛| 欧美激情综合在线| 一区二区三区自拍| 美洲天堂一区二卡三卡四卡视频| 国产精品乡下勾搭老头1| 色综合天天在线| 日韩欧美色电影| 中文字幕一区二| 琪琪一区二区三区| 96av麻豆蜜桃一区二区| 欧美高清视频一二三区 | 99re热这里只有精品免费视频| 色美美综合视频| 精品免费国产二区三区 | 在线观看免费成人| 欧美tickling网站挠脚心| 中文字幕一区二区三区乱码在线| 天天色天天操综合| 成人免费三级在线| 日韩欧美一区在线观看| 综合分类小说区另类春色亚洲小说欧美| 午夜精品123| www.在线成人| 精品久久一区二区|