aboutsummaryrefslogtreecommitdiff
path: root/src/Window.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/Window.cc')
-rw-r--r--src/Window.cc15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/Window.cc b/src/Window.cc
index 9129e7d..109b522 100644
--- a/src/Window.cc
+++ b/src/Window.cc
@@ -461,8 +461,7 @@ void FluxboxWindow::init() {
461 461
462 if (fluxbox.isStartup()) 462 if (fluxbox.isStartup())
463 m_placed = true; 463 m_placed = true;
464 else if (m_client->isTransient() || 464 else if (m_client->normal_hint_flags & (PPosition|USPosition)) {
465 m_client->normal_hint_flags & (PPosition|USPosition)) {
466 m_placed = is_visible; 465 m_placed = is_visible;
467 } else { 466 } else {
468 if (!is_visible) { 467 if (!is_visible) {
@@ -484,12 +483,20 @@ void FluxboxWindow::init() {
484 if (m_workspace_number >= screen().numberOfWorkspaces()) 483 if (m_workspace_number >= screen().numberOfWorkspaces())
485 m_workspace_number = screen().currentWorkspaceID(); 484 m_workspace_number = screen().currentWorkspaceID();
486 485
486 unsigned int real_width = frame().width();
487 unsigned int real_height = frame().height();
488 frame().applySizeHints(real_width, real_height);
489
487 // if we're a transient then we should be on the same layer and workspace 490 // if we're a transient then we should be on the same layer and workspace
488 FluxboxWindow* twin = m_client->transientFor() ? m_client->transientFor()->fbwindow() : 0; 491 FluxboxWindow* twin = m_client->transientFor() ? m_client->transientFor()->fbwindow() : 0;
489 if (twin && twin != this) { 492 if (twin && twin != this) {
490 layerItem().setLayer(twin->layerItem().getLayer()); 493 layerItem().setLayer(twin->layerItem().getLayer());
491 m_state.layernum = twin->layerNum(); 494 m_state.layernum = twin->layerNum();
492 m_workspace_number = twin->workspaceNumber(); 495 m_workspace_number = twin->workspaceNumber();
496 const int x = twin->frame().x() + (twin->frame().width() - frame().width())/2;
497 const int y = twin->frame().y() + (twin->frame().height() - frame().height())/2;
498 frame().move(x, y);
499 m_placed = true;
493 } else // if no parent then set default layer 500 } else // if no parent then set default layer
494 moveToLayer(m_state.layernum, m_state.layernum != ::ResourceLayer::NORMAL); 501 moveToLayer(m_state.layernum, m_state.layernum != ::ResourceLayer::NORMAL);
495 502
@@ -500,10 +507,6 @@ void FluxboxWindow::init() {
500 twin->title().logical()<<endl; 507 twin->title().logical()<<endl;
501 } 508 }
502 509
503 unsigned int real_width = frame().width();
504 unsigned int real_height = frame().height();
505 frame().applySizeHints(real_width, real_height);
506
507 screen().getWorkspace(m_workspace_number)->addWindow(*this); 510 screen().getWorkspace(m_workspace_number)->addWindow(*this);
508 if (m_placed) 511 if (m_placed)
509 moveResize(frame().x(), frame().y(), real_width, real_height); 512 moveResize(frame().x(), frame().y(), real_width, real_height);