The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Опять Xlib"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Опять Xlib"  
Сообщение от Kuper83 (ok) on 02-Ноя-07, 16:23 
Народ, подскажите, возможно ли под Xlib создать окно(XCreateWindow) без стандартных трёх кнопочек сверху(закрыть,свернуть...). Что то типа полноэкранного режима , но не на весь экран.
Ну или хотябы на весь.Заранее благодарен.
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

  • Опять Xlib, jd, 04:56 , 04-Ноя-07, (1)  
  • Опять Xlib, Ан, 09:10 , 06-Ноя-07, (2)  
    • Опять Xlib, dimonna, 10:04 , 06-Ноя-07, (3)  
    • Опять Xlib, Kuper83, 10:04 , 06-Ноя-07, (4)  
      • Опять Xlib, dimonna, 10:14 , 06-Ноя-07, (5)  
      • Опять Xlib, А, 10:42 , 06-Ноя-07, (6)  
        • Опять Xlib, Kuper83, 12:51 , 06-Ноя-07, (7)  
          • Опять Xlib, dimonna, 16:17 , 06-Ноя-07, (8)  
  • Опять Xlib, jd, 18:07 , 06-Ноя-07, (9)  
    • Опять Xlib, dimonna, 18:50 , 06-Ноя-07, (10)  
      • Опять Xlib, Kuper83, 10:44 , 14-Ноя-07, (11)  
        • Опять Xlib, dimonna, 11:02 , 14-Ноя-07, (12)  
          • Опять Xlib, Kuper83, 17:19 , 20-Ноя-07, (13)  
            • Опять Xlib, dimonna, 18:54 , 23-Ноя-07, (14)  

Сообщения по теме [Сортировка по времени | RSS]


1. "Опять Xlib"  
Сообщение от jd (??) on 04-Ноя-07, 04:56 
Разумеется можно! Например, mplayer, xine и многие другие программы создают окна не только без рамки и стандартных кнопок, но и произвольной формы (панели управления этими плеерами). Окна-то, конечно, прямоугольные, но выглядят и ведут себя они как произвольной формы.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Опять Xlib"  
Сообщение от Ан (??) on 06-Ноя-07, 09:10 
>Народ, подскажите, возможно ли под Xlib создать окно(XCreateWindow) без стандартных трёх кнопочек
>сверху(закрыть,свернуть...). Что то типа полноэкранного режима , но не на весь
>экран.
>Ну или хотябы на весь.Заранее благодарен.

XCreateSimpleWindow

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Опять Xlib"  
Сообщение от dimonna email(??) on 06-Ноя-07, 10:04 
>>Народ, подскажите, возможно ли под Xlib создать окно(XCreateWindow) без стандартных трёх кнопочек
>>сверху(закрыть,свернуть...). Что то типа полноэкранного режима , но не на весь
>>экран.
>>Ну или хотябы на весь.Заранее благодарен.
>
>XCreateSimpleWindow

Так ведь кнопочки создает не Xlib а Ваш оконный менеджер - запустите Ваше приложение с CreateWindow без оконного менеджера и кнопочек разумеется не будет - только область окна

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Опять Xlib"  
Сообщение от Kuper83 (??) on 06-Ноя-07, 10:04 
Не хорошо - сделать можно , но как? Какие параметры должны подставляться в XCreateSimpleWindow или какие есть другие функции?


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Опять Xlib"  
Сообщение от dimonna email(??) on 06-Ноя-07, 10:14 
>Не хорошо - сделать можно , но как? Какие параметры должны подставляться
>в XCreateSimpleWindow или какие есть другие функции?

Display *display=XOpenDisplay(getenv("DISPLAY"));

int screenNumber=DefaultScreen(display);

Window window=XCreateSimpleWindow(display, RootWindow(display, screenNumber),
1280-w-10, 1024-h-10, w, h, 1, BlackPixel(display, screenNumber),
WhitePixel(display, screenNumber));

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Опять Xlib"  
Сообщение от А (??) on 06-Ноя-07, 10:42 
>Не хорошо - сделать можно , но как? Какие параметры должны подставляться
>в XCreateSimpleWindow или какие есть другие функции?

Есть всякие стандарты для взаимодействия с оконным менеджером, типа ICCCM. Там всё прописано, как заставить оконный менеджер не приделывать кнопки. Но эти стандарты ОЧЕНЬ непонятные. Лучше взять какой-нибудь xmms и посмотреть, как это сделано в нём.

Кстати, в каких-то оконных менеджерах хmms тоже с офрмлением окон запускается... в twm чтоли... так-что может что-то другое взять за образец.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Опять Xlib"  
Сообщение от Kuper83 (??) on 06-Ноя-07, 12:51 
Ну впринципе стратегию я понял - разберусь.
Тут у меня ещё один вопросик!
В приложении необходимо перерисовывать компоненты из разных потоков - поэтому вызываю XInitThreads. Но после закрытия приложения основной поток не выгружается и висит в процессах.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Опять Xlib"  
Сообщение от dimonna email(??) on 06-Ноя-07, 16:17 
>Ну впринципе стратегию я понял - разберусь.
>Тут у меня ещё один вопросик!
>В приложении необходимо перерисовывать компоненты из разных потоков - поэтому вызываю XInitThreads.
>Но после закрытия приложения основной поток не выгружается и висит в
>процессах.

можно на код взглянуть? - потоки должны (в идеале) определить что процесс завершается и завершиться, в противном случае потоки КИЛЯЮТСЯ. Может быть Вы создаете не потоки а процессы?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Опять Xlib"  
Сообщение от jd (??) on 06-Ноя-07, 18:07 
Вот, сляпано из кода, выдранного из SDL: он, когда работает поверх иксов, тоже позволяет делать окна без рамки и кнопок.

/* Set no frame WM hint. From SDL sources. */
void SetNoBorder(Display *dpy, Window win, Window root)
{ int set = 0;
  Atom WM_HINTS;
  /* First try to set MWM hints */
  WM_HINTS = XInternAtom(dpy, "_MOTIF_WM_HINTS", True);
  if(WM_HINTS != None)
  { /* Hints used by Motif compliant window managers */
    struct
    { unsigned long flags;
      unsigned long functions;
      unsigned long decorations;
      long input_mode;
      unsigned long status;
    } MWMHints = { (1L << 1), 0, 0, 0, 0 };

    XChangeProperty(dpy, win, WM_HINTS, WM_HINTS, 32,
                    PropModeReplace, (unsigned char *)&MWMHints,
                    sizeof(MWMHints)/sizeof(long));
    set = 1;
  }

  /* Now try to set KWM hints */
  WM_HINTS = XInternAtom(dpy, "KWM_WIN_DECORATION", True);
  if(WM_HINTS != None)
  { long KWMHints = 0;

    XChangeProperty(dpy, win, WM_HINTS, WM_HINTS, 32,
                    PropModeReplace, (unsigned char *)&KWMHints,
                    sizeof(KWMHints)/sizeof(long));
    set = 1;
  }

  /* Now try to set GNOME hints */
  WM_HINTS = XInternAtom(dpy, "_WIN_HINTS", True);
  if(WM_HINTS != None)
  { long GNOMEHints = 0;

    XChangeProperty(dpy, win, WM_HINTS, WM_HINTS, 32,
                    PropModeReplace, (unsigned char *)&GNOMEHints,
                    sizeof(GNOMEHints)/sizeof(long));
    set = 1;
  }

  /* Finally set the transient hints if necessary */
  if(! set)
    XSetTransientForHint(dpy, win, root);
}

То есть, судя по всему, единого абсолютного способа нет и для разных window manager'ов метод может отличаться. Но приведённый вариант, видимо, работает в большинстве случаев (так как, видимо, большинство wm укладываются в рамки Motif/KDE/GNOME).

* Параметр 'root' - это корневое окно.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Опять Xlib"  
Сообщение от dimonna email(??) on 06-Ноя-07, 18:50 
>[оверквотинг удален]
>    XSetTransientForHint(dpy, win, root);
>}
>
>
>То есть, судя по всему, единого абсолютного способа нет и для разных
>window manager'ов метод может отличаться. Но приведённый вариант, видимо, работает в
>большинстве случаев (так как, видимо, большинство wm укладываются в рамки Motif/KDE/GNOME).
>
>
>* Параметр 'root' - это корневое окно.

Абсолютно верно - тут мы изменяем свойства воспринимаемые оконным менеджером, в то время как для окна xlib - это всего-лишь строка

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Опять Xlib"  
Сообщение от Kuper83 (??) on 14-Ноя-07, 10:44 
Спасибо, вроде с окнами получилось, но просто не знаю чё делать с XinitThreads().
Я даже не создаю других потоков - только родительский. И всё равно после закрытия окна он висит. Перепробовал всё - не убивает его. Код примерно такой:
main()
{
XInitThreads();
app Aplication();//открывает дисплей, создаёт окно и заходит в бесконечный цикл отловки событий
}


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Опять Xlib"  
Сообщение от dimonna email(??) on 14-Ноя-07, 11:02 
>[оверквотинг удален]
>XinitThreads().
>Я даже не создаю других потоков - только родительский. И всё равно
>после закрытия окна он висит. Перепробовал всё - не убивает его.
>Код примерно такой:
>main()
>{
>XInitThreads();
>app Aplication();//открывает дисплей, создаёт окно и заходит в бесконечный цикл отловки событий
>
>}

Конечно посмотреть бы на код... Возможно XLockDisplay ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Опять Xlib"  
Сообщение от Kuper83 (??) on 20-Ноя-07, 17:19 
XLockDisplay я не вызываю.
А не закрывает он родительский поток:
Насчёт кода конечно как то можно но его впринципе очень много, но по сути у меня есть иерархия классов. Моё приложение является младшим наследником этой иерархии - так вот (при вызове XInitThreads) после закрытия приложения не вызываются деструкторы родителей??? Как только коментирую строчку с вызовом этой функции - все деструкторы последовательно вызываются и приложение закрывается корректно. Чё делать не знаю!!!


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "Опять Xlib"  
Сообщение от dimonna email(??) on 23-Ноя-07, 18:54 
>XLockDisplay я не вызываю.
>А не закрывает он родительский поток:
>Насчёт кода конечно как то можно но его впринципе очень много, но
>по сути у меня есть иерархия классов. Моё приложение является младшим
>наследником этой иерархии - так вот (при вызове XInitThreads) после закрытия
>приложения не вызываются деструкторы родителей??? Как только коментирую строчку с вызовом
>этой функции - все деструкторы последовательно вызываются и приложение закрывается корректно.
>Чё делать не знаю!!!

Надо смотреть код, sorry

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру