comparison gui/wm/ws.c @ 35645:c0ec433fe432

Add new function wsSizeHint(). Use it twice instead of having almost identical code.
author ib
date Mon, 14 Jan 2013 15:20:35 +0000
parents fc4d3215bdf7
children 0e0775a09c97
comparison
equal deleted inserted replaced
35644:fc4d3215bdf7 35645:c0ec433fe432
434 win->Y = y; 434 win->Y = y;
435 break; 435 break;
436 } 436 }
437 } 437 }
438 438
439 /**
440 * @brief Replace the size hints for the WM_NORMAL_HINTS property of a window.
441 *
442 * @param win pointer to a ws window structure
443 * @param hints size hints bits
444 */
445 static void wsSizeHint(wsTWindow *win, long hints)
446 {
447 win->SizeHint.flags = hints;
448
449 if (hints & PPosition) {
450 win->SizeHint.x = win->X;
451 win->SizeHint.y = win->Y;
452 }
453
454 if (hints & PSize) {
455 win->SizeHint.width = win->Width;
456 win->SizeHint.height = win->Height;
457 }
458
459 if (hints & PMinSize || win->Property & wsMinSize) {
460 win->SizeHint.flags |= PMinSize;
461 win->SizeHint.min_width = win->Width;
462 win->SizeHint.min_height = win->Height;
463 }
464
465 if (hints & PMaxSize || win->Property & wsMaxSize) {
466 win->SizeHint.flags |= PMaxSize;
467 win->SizeHint.max_width = win->Width;
468 win->SizeHint.max_height = win->Height;
469 }
470
471 if (hints & PResizeInc) {
472 win->SizeHint.width_inc = 1;
473 win->SizeHint.height_inc = 1;
474 }
475
476 if (hints & PAspect) {
477 win->SizeHint.min_aspect.x = win->Width;
478 win->SizeHint.min_aspect.y = win->Height;
479 win->SizeHint.max_aspect.x = win->Width;
480 win->SizeHint.max_aspect.y = win->Height;
481 }
482
483 // if (hints & PBaseSize)
484 {
485 win->SizeHint.base_width = win->Width;
486 win->SizeHint.base_height = win->Height;
487 }
488
489 if (hints & PWinGravity)
490 win->SizeHint.win_gravity = StaticGravity;
491
492 XSetWMNormalHints(wsDisplay, win->WindowID, &win->SizeHint);
493 }
494
439 // ---------------------------------------------------------------------------------------------- 495 // ----------------------------------------------------------------------------------------------
440 // Create window. 496 // Create window.
441 // X,Y : window position 497 // X,Y : window position
442 // wX,wY : size of window 498 // wX,wY : size of window
443 // bW : border width 499 // bW : border width
539 wsClassHint.res_name = "MPlayer"; 595 wsClassHint.res_name = "MPlayer";
540 596
541 wsClassHint.res_class = "MPlayer"; 597 wsClassHint.res_class = "MPlayer";
542 XSetClassHint(wsDisplay, win->WindowID, &wsClassHint); 598 XSetClassHint(wsDisplay, win->WindowID, &wsClassHint);
543 599
544 win->SizeHint.flags = PPosition | PSize | PResizeInc | PWinGravity; // | PBaseSize; 600 wsSizeHint(win, PPosition | PSize | PResizeInc /* | PBaseSize */ | PWinGravity);
545 win->SizeHint.x = win->X;
546 win->SizeHint.y = win->Y;
547 win->SizeHint.width = win->Width;
548 win->SizeHint.height = win->Height;
549
550 if (D & wsMinSize) {
551 win->SizeHint.flags |= PMinSize;
552 win->SizeHint.min_width = win->Width;
553 win->SizeHint.min_height = win->Height;
554 }
555
556 if (D & wsMaxSize) {
557 win->SizeHint.flags |= PMaxSize;
558 win->SizeHint.max_width = win->Width;
559 win->SizeHint.max_height = win->Height;
560 }
561
562 win->SizeHint.height_inc = 1;
563 win->SizeHint.width_inc = 1;
564 win->SizeHint.base_width = win->Width;
565 win->SizeHint.base_height = win->Height;
566 win->SizeHint.win_gravity = StaticGravity;
567 XSetWMNormalHints(wsDisplay, win->WindowID, &win->SizeHint);
568 601
569 win->WMHints.flags = InputHint | StateHint; 602 win->WMHints.flags = InputHint | StateHint;
570 win->WMHints.input = True; 603 win->WMHints.input = True;
571 win->WMHints.initial_state = NormalState; 604 win->WMHints.initial_state = NormalState;
572 XSetWMHints(wsDisplay, win->WindowID, &win->WMHints); 605 XSetWMHints(wsDisplay, win->WindowID, &win->WMHints);
1203 void wsResizeWindow(wsTWindow *win, int sx, int sy) 1236 void wsResizeWindow(wsTWindow *win, int sx, int sy)
1204 { 1237 {
1205 win->Width = sx; 1238 win->Width = sx;
1206 win->Height = sy; 1239 win->Height = sy;
1207 1240
1208 win->SizeHint.flags = PPosition | PSize | PWinGravity; // | PBaseSize;
1209 win->SizeHint.x = win->X;
1210 win->SizeHint.y = win->Y;
1211 win->SizeHint.width = win->Width;
1212 win->SizeHint.height = win->Height;
1213
1214 if (win->Property & wsMinSize) {
1215 win->SizeHint.flags |= PMinSize;
1216 win->SizeHint.min_width = win->Width;
1217 win->SizeHint.min_height = win->Height;
1218 }
1219
1220 if (win->Property & wsMaxSize) {
1221 win->SizeHint.flags |= PMaxSize;
1222 win->SizeHint.max_width = win->Width;
1223 win->SizeHint.max_height = win->Height;
1224 }
1225
1226 win->SizeHint.win_gravity = StaticGravity;
1227 win->SizeHint.base_width = sx;
1228 win->SizeHint.base_height = sy;
1229
1230 if (vo_wm_type == 0) 1241 if (vo_wm_type == 0)
1231 XUnmapWindow(wsDisplay, win->WindowID); 1242 XUnmapWindow(wsDisplay, win->WindowID);
1232 1243
1233 XSetWMNormalHints(wsDisplay, win->WindowID, &win->SizeHint); 1244 wsSizeHint(win, PPosition | PSize /* | PBaseSize */ | PWinGravity);
1234 XResizeWindow(wsDisplay, win->WindowID, sx, sy); 1245 XResizeWindow(wsDisplay, win->WindowID, sx, sy);
1235 1246
1236 if (win->ReSize) 1247 if (win->ReSize)
1237 win->ReSize(win->X, win->Y, win->Width, win->Height); 1248 win->ReSize(win->X, win->Y, win->Width, win->Height);
1238 1249