- XineramaScreenInfo *info = parent->get_xinerama_info(-1);
- int cx = info ? info->x_org + info->width/2 : parent->get_root_w(0)/2;
- int cy = info ? info->y_org + info->height/2 : parent->get_root_h(0)/2;
- int vx = viewing->get_vx(), rx = 0;
- int vy = viewing->get_vy(), ry = 0;
- wdw->get_root_coordinates(vx, vy, &rx, &ry);
- rx += (rx >= cx ? -view_w+viewing->w/4 : viewing->w-viewing->w/4);
- ry += (ry >= cy ? -view_h+viewing->h/4 : viewing->h-viewing->h/4);
- AssetViewPopup *popup = new AssetViewPopup(this, draw_mode,
- rx, ry, view_w, view_h);
- if( draw_mode == ASSET_VIEW_MEDIA_MAP )
- vicon->playing_audio = -1;
- wdw->set_active_subwindow(popup);
- return popup;
+ int rx = 0, ry = 0, rw = 0, rh = 0;
+ if( draw_mode != ASSET_VIEW_FULL ) {
+ XineramaScreenInfo *info = parent->get_xinerama_info(-1);
+ int cx = info ? info->x_org + info->width/2 : parent->get_root_w(0)/2;
+ int cy = info ? info->y_org + info->height/2 : parent->get_root_h(0)/2;
+ int vx = viewing->get_vx(), vy = viewing->get_vy();
+ wdw->get_root_coordinates(vx, vy, &rx, &ry);
+ rx += (rx >= cx ? -view_w+viewing->w/4 : viewing->w-viewing->w/4);
+ ry += (ry >= cy ? -view_h+viewing->h/4 : viewing->h-viewing->h/4);
+ rw = view_w; rh = view_h;
+ }
+ else
+ parent->get_fullscreen_geometry(rx, ry, rw, rh);
+ AssetViewPopup *av_popup = (AssetViewPopup *)vpopup;
+ if( av_popup )
+ av_popup->reposition_window(rx, ry, rw, rh);
+ else
+ av_popup = new AssetViewPopup(this, draw_mode, rx, ry, rw, rh);
+ int playing_audio = gui->play_off ? -1 : 0;
+ if( !playing_audio ) {
+ switch( draw_mode ) {
+ case ASSET_VIEW_NONE:
+ case ASSET_VIEW_ICON:
+ case ASSET_VIEW_MEDIA_MAP:
+ case ASSET_VIEW_FULL:
+ playing_audio = -1;
+ break;
+ case ASSET_VIEW_MEDIA:
+ switch( gui->vicon_drawing ) {
+ case AVICON_SRC_TARGET:
+ case AVICON_NO_PLAY:
+ playing_audio = -1;
+ break;
+ }
+ }
+ }
+ vicon->playing_audio = playing_audio;
+ wdw->set_active_subwindow(av_popup);
+ return av_popup;
+}
+
+void AssetVIconThread::close_view_popup()
+{
+ stop_drawing();
+ drawing_started(); // waits for draw lock
+ drawing_stopped();