Code

gtk-tpdfv-screen, tpdfview: Implemented "move window to next screen".
[tpdfview.git] / src / gtk-tpdfv-screen.c
index a118d79f67c6a6a559b4cbad93b6b713711de3ea..104522e01e81b2d6b0d7f063d81933ba3b1de5a3 100644 (file)
@@ -121,7 +121,7 @@ gtk_tpdfv_screens_init(const gchar *display_name)
                }
        }
        return screens;
-} /* gtk_tpdfv_new */
+} /* gtk_tpdfv_screens_init */
 
 void
 gtk_tpdfv_screens_destroy(gtk_tpdfv_screens_t *screens)
@@ -132,7 +132,7 @@ gtk_tpdfv_screens_destroy(gtk_tpdfv_screens_t *screens)
        if (screens->screens)
                free(screens->screens);
        free(screens);
-} /* gtk_tpdfv_destroy_screens */
+} /* gtk_tpdfv_screens_destroy */
 
 gint
 gtk_tpdfv_screens_number(const gtk_tpdfv_screens_t *screens)
@@ -142,5 +142,57 @@ gtk_tpdfv_screens_number(const gtk_tpdfv_screens_t *screens)
        return screens->num_screens;
 } /* gtk_tpdfv_screens_number */
 
+void
+gtk_tpdfv_screens_window_set(const gtk_tpdfv_screens_t *screens,
+               GtkWindow *window, gint screen)
+{
+       screen_t *s_old, *s_new;
+
+       gint x = 0, y = 0;
+       gint current;
+
+       if ((! screens) || (! window)
+                       || (screen < 0) || (screen >= screens->num_screens))
+               return;
+
+       gtk_window_get_position(window, &x, &y);
+
+       current = gtk_tpdfv_screens_window_get(screens, window);
+       assert((0 <= current) && (current < screens->num_screens));
+
+       s_old = screens->screens + current;
+       s_new = screens->screens + screen;
+
+       gtk_window_set_screen(window, s_new->screen);
+       gtk_window_move(window,
+                       s_new->x + (x - s_old->x), s_new->y + (y - s_old->y));
+} /* gtk_tpdfv_screens_window_set */
+
+gint
+gtk_tpdfv_screens_window_get(const gtk_tpdfv_screens_t *screens,
+               GtkWindow *window)
+{
+       GdkScreen *gdk_screen;
+
+       gint x = 0, y = 0;
+       gint i;
+
+       if ((! screens) || (! window))
+               return -1;
+
+       gdk_screen = gtk_window_get_screen(window);
+       gtk_window_get_position(window, &x, &y);
+
+       for (i = 0; i < screens->num_screens; ++i) {
+               screen_t *screen = screens->screens + i;
+
+               if ((screen->screen == gdk_screen)
+                               && (screen->x <= x) && (x <= screen->x + screen->width)
+                               && (screen->y <= y) && (y <= screen->y + screen->height))
+                       return i;
+       }
+       return -1;
+} /* gtk_tpdfv_screens_window_set */
+
 /* vim: set tw=78 sw=4 ts=4 noexpandtab : */