241
245
*bottom = edge_b;
255
* Return value: The neighbouring window from @windows in the given direction
256
* or %NULL in case no window is found or @active is %NULL
259
ww_find_neighbour (WnckScreen *screen,
262
WwDirection direction)
264
WnckWindow *neighbour;
266
int ax, ay, aw, ah; /* active window geometry */
267
int wx, wy, ww, wh; /* geometry for currently checked window */
268
int nx, ny, nw, nh; /* geometry of neighbour */
272
g_return_val_if_fail (WNCK_IS_SCREEN(screen), NULL);
274
if (g_list_length(windows) == 0)
279
/* If there is no active window, do nothing */
281
|| wnck_window_is_skip_tasklist (active)) {
282
g_debug ("No active window");
286
nx = ny = nw = nh = 0;
288
wnck_window_get_geometry (active, &ax, &ay, &aw, &ah);
289
g_debug("Active window '%s' (%d, %d) @ %d x %d",
290
wnck_window_get_name (active), ax, ay, aw, ah);
293
if ( direction == LEFT )
295
for ( next = windows; next; next = next->next )
297
wnck_window_get_geometry (next->data, &wx, &wy, &ww, &wh);
300
if ( neighbour == NULL )
302
neighbour = WNCK_WINDOW (next->data);
303
nx = wx; ny = wy; nw = ww; nh = wh;
307
if ( abs(wy - ay) < abs(ny - ay) )
309
neighbour = WNCK_WINDOW (next->data);
310
nx = wx; ny = wy; nw = ww; nh = wh;
315
neighbour = WNCK_WINDOW (next->data);
316
nx = wx; ny = wy; nw = ww; nh = wh;
321
else if ( direction == RIGHT )
323
int a_right = ax + aw;
326
for ( next = windows; next; next = next->next )
328
wnck_window_get_geometry (next->data, &wx, &wy, &ww, &wh);
331
if ( w_right > a_right )
333
if ( neighbour == NULL )
335
neighbour = WNCK_WINDOW (next->data);
336
nx = wx; ny = wy; nw = ww; nh = wh;
338
else if ( w_right == (nx + nw) )
340
if ( abs(wy - ay) < abs(ny - ay) )
342
neighbour = WNCK_WINDOW (next->data);
343
nx = wx; ny = wy; nw = ww; nh = wh;
346
else if ( w_right < (nx + nw) ) {
347
neighbour = WNCK_WINDOW (next->data);
348
nx = wx; ny = wy; nw = ww; nh = wh;
353
else if ( direction == DOWN )
355
int a_bottom = ay + ah;
358
for ( next = windows; next; next = next->next )
360
wnck_window_get_geometry (next->data, &wx, &wy, &ww, &wh);
363
if ( w_bottom > a_bottom )
365
if ( neighbour == NULL )
367
neighbour = WNCK_WINDOW (next->data);
368
nx = wx; ny = wy; nw = ww; nh = wh;
370
else if ( w_bottom == (ny + nh) )
372
if ( abs(wx - ax) < abs(nx - ax) )
374
neighbour = WNCK_WINDOW (next->data);
375
nx = wx; ny = wy; nw = ww; nh = wh;
378
else if ( w_bottom < (ny + nh) ) {
379
neighbour = WNCK_WINDOW (next->data);
380
nx = wx; ny = wy; nw = ww; nh = wh;
385
else if ( direction == UP )
387
for ( next = windows; next; next = next->next )
389
wnck_window_get_geometry (next->data, &wx, &wy, &ww, &wh);
392
if ( neighbour == NULL )
394
neighbour = WNCK_WINDOW (next->data);
395
nx = wx; ny = wy; nw = ww; nh = wh;
399
if ( abs(wx - ax) < abs(nx - ax) )
401
neighbour = WNCK_WINDOW (next->data);
402
nx = wx; ny = wy; nw = ww; nh = wh;
405
else if ( wy > ny ) {
406
neighbour = WNCK_WINDOW (next->data);
407
nx = wx; ny = wy; nw = ww; nh = wh;
414
g_debug ("Found neighbour '%s' (%d, %d) @ %d x %d",
415
wnck_window_get_name (neighbour), nx, ny, nw, nh);
421
ww_get_event_time (void)
427
ww_set_event_time (guint32 event_time)
429
_event_time = event_time;
b'\\ No newline at end of file'