bool WContainerWidget::wasEmpty() const { /* * First case: on IE6, a popup widget has a shim child. * Second case: WGroupBox always has a legend */ if (isPopup() || firstChildIndex() > 0) return false; else return ((transientImpl_ ? transientImpl_->addedChildren_.size() : 0) == children_->size()); }
void gMainWindow::setVisible(bool vl) { if (!vl) _hidden = true; if (vl == isVisible()) return; if (vl) { bool arr = !isVisible(); emitOpen(); if (!opened) return; _not_spontaneous = !visible; visible = true; _hidden = false; setTransparent(_transparent); if (isTopLevel()) { if (!_title || !*_title) gtk_window_set_title(GTK_WINDOW(border), gApplication::defaultTitle()); /*if (!_xembed) { fprintf(stderr, "gtk_window_group_add_window: %p -> %p\n", border, gApplication::currentGroup()); gtk_window_group_add_window(gApplication::currentGroup(), GTK_WINDOW(border)); fprintf(stderr, "-> %p\n", gtk_window_get_group(GTK_WINDOW(border))); }*/ // Thanks for Ubuntu's GTK+ patching :-( #if GTK_CHECK_VERSION(3,0,0) gtk_window_set_has_resize_grip(GTK_WINDOW(border), false); #else if (g_object_class_find_property(G_OBJECT_GET_CLASS(border), "has-resize-grip")) g_object_set(G_OBJECT(border), "has-resize-grip", false, (char *)NULL); #endif gtk_window_move(GTK_WINDOW(border), bufX, bufY); if (isPopup()) { gtk_widget_show_now(border); gtk_widget_grab_focus(border); } else gtk_window_present(GTK_WINDOW(border)); if (isUtility()) { gMainWindow *parent = _current; if (!parent && gApplication::mainWindow() && gApplication::mainWindow() != this) parent = gApplication::mainWindow(); if (parent) gtk_window_set_transient_for(GTK_WINDOW(border), GTK_WINDOW(parent->border)); } if (gApplication::mainWindow() == this) { int desktop = session_manager_get_desktop(); if (desktop >= 0) { //fprintf(stderr, "X11_window_set_desktop: %d (%d)\n", desktop, true); X11_window_set_desktop((Window)handle(), true, desktop); session_manager_set_desktop(-1); } } } else { gtk_widget_show(border); parent()->performArrange(); } drawMask(); if (focus) { //fprintf(stderr, "focus = %s\n", focus->name()); focus->setFocus(); focus = 0; } if (skipTaskBar()) _activate = true; if (arr) performArrange(); } else { if (this == _active) focus = gApplication::activeControl(); _not_spontaneous = visible; gContainer::setVisible(false); if (_popup) gApplication::exitLoop(this); if (gApplication::_button_grab && !gApplication::_button_grab->isReallyVisible()) gApplication::setButtonGrab(NULL); } }
void gMainWindow::reparent(gContainer *newpr, int x, int y) { GtkWidget *new_border; int w, h; gColor fg, bg; if (_xembed) return; bg = background(); fg = foreground(); if (isTopLevel() && newpr) { gtk_window_remove_accel_group(GTK_WINDOW(topLevel()->border), accel); new_border = gtk_event_box_new(); gtk_widget_reparent(widget, new_border); embedMenuBar(new_border); _no_delete = true; gtk_widget_destroy(border); _no_delete = false; border = new_border; registerControl(); setCanFocus(false); setParent(newpr); connectParent(); borderSignals(); initWindow(); setBackground(bg); setForeground(fg); setFont(font()); checkMenuBar(); bufX = bufY = 0; move(x, y); gtk_widget_set_size_request(border, width(), height()); // Hidden children are incorrectly shown. Fix that! hideHiddenChildren(); } else if ((!isTopLevel() && !newpr) || (isTopLevel() && isPopup())) //|| (isTopLevel() && (isPopup() ^ (type == GTK_WINDOW_POPUP)))) { gtk_window_remove_accel_group(GTK_WINDOW(topLevel()->border), accel); // TODO: test that new_border = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_reparent(widget, new_border); embedMenuBar(new_border); _no_delete = true; gtk_widget_destroy(border); _no_delete = false; border = new_border; registerControl(); setCanFocus(true); if (parent()) { parent()->remove(this); parent()->arrange(); setParent(NULL); } initWindow(); borderSignals(); setBackground(bg); setForeground(fg); setFont(font()); move(x, y); w = width(); h = height(); bufW = bufH = -1; gtk_widget_set_size_request(border, 1, 1); resize(w, h); hideHiddenChildren(); _popup = false; //type == GTK_WINDOW_POPUP; } else { gContainer::reparent(newpr, x, y); } }