Russian Qt Forum
Ноябрь 24, 2024, 21:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Bring window to front  (Прочитано 25072 раз)
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #15 : Ноябрь 20, 2008, 15:31 »

Нет, почему, я пробовал справиться с проблемой функциями Х11.
Например, XRaiseWindow().
Однако это не помогло Грустный

WM может не позволить это сделать.

Можно поподробнее, что значит "дернуть атом _NET_ACTIVE_WINDOW"?  Имеется в виду XSendEvent() ?
Да, ветки наверное стоит склеить Улыбающийся А то тема одна и та же.

Код:
climsg(winId(), NET_ACTIVE_WINDOW, 2, CurrentTime);

примеры есть по ссылке на лоре.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #16 : Ноябрь 20, 2008, 15:56 »

ок, спасибо, попробую вечером.
потом отпишусь Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #17 : Ноябрь 21, 2008, 01:29 »

Alex Custov, все заработало, большой данке шен за помошь Улыбающийся
Немного пришлось напильничком обточить, но в общем то что надо Улыбающийся
Правда не знаю, как с этим делом на маке, но под сузей в КДЕ и гноме пашет.
Что странно - троллевский саппорт ничего дельного так и не предложил...
ИМХО есть смысл таки на вику забросить.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #18 : Ноябрь 21, 2008, 12:38 »

Alex Custov, все заработало, большой данке шен за помошь Улыбающийся
Немного пришлось напильничком обточить, но в общем то что надо Улыбающийся
Правда не знаю, как с этим делом на маке, но под сузей в КДЕ и гноме пашет.
Что странно - троллевский саппорт ничего дельного так и не предложил...
ИМХО есть смысл таки на вику забросить.

Я их вообще-то не понимаю. Под иксами они используют NETWM вовсю, но именно активацию окна через NETWM не делают. Не понятно.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #19 : Ноябрь 21, 2008, 12:52 »

Возможно, именно за эту часть у них отвечает какой нибудь индус Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #20 : Ноябрь 22, 2008, 13:36 »

Alex, в общем, еще такая проблемка под х11 выползла:
Надо чтобы окно могло динамически менять свое положение между рабочими столами.
То есть либо было видно на всех, либо на одном (текущем).
Делаю так:


Код
C++ (Qt)
void BaseFrame::stickToAll(bool stick)
{
#ifdef Q_WS_X11
   // панель будет видима на всех рабочих столах
   uint val = 0xffffffff;
 
   if (!stick) {
       Atom NET_CURRENT_DESKTOP = XInternAtom(QX11Info::display(), "_NET_CURRENT_DESKTOP", False);
       ulong *u = reinterpret_cast<ulong *>(wm_property(QX11Info::appRootWindow(), NET_CURRENT_DESKTOP, XA_CARDINAL));
       val = (uint)*u;
   }
 
   Atom NET_WM_DESKTOP = XInternAtom(QX11Info::display(), "_NET_WM_DESKTOP", False);
   XChangeProperty(QX11Info::display(), winId(), NET_WM_DESKTOP, XA_CARDINAL, 32,
         PropModeReplace, (unsigned char *)&val, 1);
 
#endif
}

Проблема в том, что функция срабатывает только один раз.
Последующие вызовы  XChangeProperty с другим параметром val ничего не меняют.
В чем может быть баг?
« Последнее редактирование: Ноябрь 22, 2008, 18:06 от pastor » Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #21 : Ноябрь 22, 2008, 15:59 »

чтобы свойства подхватил WM, их нужно менять через сообщения:

Код:
using namespace netwm;

class W : public QPushButton
{
    Q_OBJECT

    public:
        W() : QPushButton("Click")
        {
            netwm::init();
            setCheckable(true);
            connect(this, SIGNAL(toggled(bool)), this, SLOT(slot(bool)));
        }

    public slots:
        void slot(bool stick)
        {
#ifdef Q_WS_X11
            quint32 val = 0xffffffff;

            if(!stick)
            {
                quint32 *u = reinterpret_cast<quint32 *>(::property(QX11Info::appRootWindow(), NET_CURRENT_DESKTOP, XA_CARDINAL, 0));

                if(u)
                {
                    val = (uint) *u;
                    XFree(u);
                }
            }

            qDebug("Setting desktop %d", val);

            climsg(winId(), NET_WM_DESKTOP, val);
#endif
        }
};

Почему ты не пользуешься namespace netwm? Я же специально его добавил, чтобы было удобней.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #22 : Ноябрь 22, 2008, 16:11 »

Почему ты не пользуешься namespace netwm? Я же специально его добавил, чтобы было удобней.

Оно то удобней, но если речь идет об *.h файле, то это плохой стиль и не рекомендуеться "показывать" весь namespace в заголовочном файле.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #23 : Ноябрь 22, 2008, 16:13 »

Оно то удобней, но если речь идет об *.h файле, то это плохой стиль и не рекомендуеться "показывать" весь namespace в заголовочном файле.

Ик... переведи.
Записан
Rcus
Гость
« Ответ #24 : Ноябрь 22, 2008, 16:47 »

Оно то удобней, но если речь идет об *.h файле, то это плохой стиль и не рекомендуеться "показывать" весь namespace в заголовочном файле.

Ик... переведи.

когда вы включаете заголовочный файл со строкой "using namespace .." в другие файлы то его действие распространяется дальше и может приводить к очень неприятным последствиям сравнимым по действию с неправильно именованными макросами.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #25 : Ноябрь 22, 2008, 17:14 »

когда вы включаете заголовочный файл со строкой "using namespace .." в другие файлы то его действие распространяется дальше и может приводить к очень неприятным последствиям сравнимым по действию с неправильно именованными макросами.

"using namespace netwm" используется в .cpp файле, после включения "netwm.h". С чего вы с пастором взяли, что using namespace прописан в .h-ке ? Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #26 : Ноябрь 22, 2008, 17:17 »

чтобы свойства подхватил WM, их нужно менять через сообщения:
Почему ты не пользуешься namespace netwm? Я же специально его добавил, чтобы было удобней.

Еще раз благодарю - все заработало Улыбающийся
Просто я с netwm раньше не работал, некоторые вещи несколько неочевидны и реально требуют опыта...
Насчет namespace я, честно говоря, провтыкал и не скачал твои исходники по ссылке сразу.
А так конечно оно удобнее Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Rcus
Гость
« Ответ #27 : Ноябрь 22, 2008, 17:19 »

"using namespace netwm" используется в .cpp файле, после включения "netwm.h". С чего вы с пастором взяли, что using namespace прописан в .h-ке ? Улыбающийся

А я и не делал предположений. Мой пост пояснял что может быть плохого в абстрактном включении команды using namespace .. в заголовочный файл.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #28 : Ноябрь 22, 2008, 17:42 »

А я и не делал предположений. Мой пост пояснял что может быть плохого в абстрактном включении команды using namespace .. в заголовочный файл.

Оно понятно, что абстрактно. Непонятно как замечание по поводу включения namespace-ов в h-ки могло возникнуть глядя на код выше Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #29 : Ноябрь 22, 2008, 17:43 »

в общем сделал финальный вариант так:

Код:
void BaseFrame::stickToAll(bool stick)
{
#ifdef Q_WS_X11
    // панель будет видима на всех рабочих столах
    uint val = 0xffffffff;

    if (!stick) {
        Atom NET_CURRENT_DESKTOP = XInternAtom(QX11Info::display(), "_NET_CURRENT_DESKTOP", False);
        ulong *u = reinterpret_cast<ulong *>(wm_property(QX11Info::appRootWindow(), NET_CURRENT_DESKTOP, XA_CARDINAL));
        if (u)
            val = (uint)*u;
    }

    Atom NET_WM_DESKTOP = XInternAtom(QX11Info::display(), "_NET_WM_DESKTOP", False);
    wm_climsg(winId(), NET_WM_DESKTOP, val);

    XChangeProperty(QX11Info::display(), winId(), NET_WM_DESKTOP, XA_CARDINAL, 32,
                    PropModeReplace, (unsigned char *)&val, 1);

#endif
}

Причем если  XChangeProperty(...) не оставить, то climsg(...) в первый раз не срабатывает.
Так и должно быть?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.172 секунд. Запросов: 23.