Package: xpdf-reader Version: 3.02-1.3 Severity: normal Hi,
since the fullscreen mode of xpdf is a real one and not just a big aligned window, pressing the 'g' key ("Goto page ...") wants to set focus on a widget that does not exist and thus crashes xpdf. This is really ugly in a presentation, when somebody asks a question afterwards and starts with "On slide 12 you ..." ;-) I attached two distinct patches to apply (patch -p1 < foo.patch) on the current xpdf source in Debian. The first (fix.patch) adds an "if" which disallows pressing 'g' in fullscreen mode. So you have to press "M-f g 12 Ret M-f" to first switch fullscreen off, go to slide 12 and toggle fullscreen mode again. The second patch (feature.patch) goes another way. Here the workflow on the question will be "g 12 Ret". Pressing 'g' will add the known xpdf toolbar to the top of the screen and set the focus on the page field. After pressing Return, the toolbar will hide and slide 12 is displayed. Also, after pressing 'g', a click on the slide will make the toolbar go away, while some other action does no make it go away. (It behaves as I like now.) It also has a bug: the zoom value is not set correctly until you use it. So, please, either apply the first patch to fix the segfault or apply the second patch to get a nice (experimental though) feature for xpdf presentations. Regards, Stephan PS: I haven't checked if the bug is fixed in a more recent or development version of xpdf. -- System Information: Debian Release: lenny/sid APT prefers testing APT policy: (990, 'testing'), (500, 'unstable'), (1, 'experimental') Architecture: amd64 (x86_64) Kernel: Linux 2.6.24 (SMP w/2 CPU cores; PREEMPT) Locale: LANG=en_US.ISO-8859-15, LC_CTYPE=en_US.ISO-8859-15 (charmap=ISO-8859-15) Shell: /bin/sh linked to /bin/bash Versions of packages xpdf-reader depends on: ii gsfonts 1:8.11+urwcyr1.0.7~pre43-2 Fonts for the Ghostscript interpre ii lesstif2 1:0.95.0-2.1 OSF/Motif 2.1 implementation relea ii libc6 2.7-10 GNU C Library: Shared libraries ii libfreetype6 2.3.5-1+b1 FreeType 2 font engine, shared lib ii libgcc1 1:4.3.0-3 GCC support library ii libice6 2:1.0.4-1 X11 Inter-Client Exchange library ii libpaper1 1.1.23 library for handling paper charact ii libsm6 2:1.0.3-1+b1 X11 Session Management library ii libstdc++6 4.3.0-3 The GNU Standard C++ Library v3 ii libt1-5 5.1.2-2 Type 1 font rasterizer library - r ii libx11-6 2:1.0.3-7 X11 client-side library ii libxext6 2:1.0.4-1 X11 miscellaneous extension librar ii libxp6 1:1.0.0.xsf1-1 X Printing Extension (Xprint) clie ii libxpm4 1:3.5.7-1 X11 pixmap library ii libxt6 1:1.0.5-3 X11 toolkit intrinsics library ii xpdf-common 3.02-1.3 Portable Document Format (PDF) sui xpdf-reader recommends no packages. -- no debconf information -- Stephan Beyer <[EMAIL PROTECTED]>, PGP 0x6EDDD207FCC5040F
diff -ruN xpdf-3.02.old/xpdf/XPDFViewer.cc xpdf-3.02.fix/xpdf/XPDFViewer.cc --- xpdf-3.02.old/xpdf/XPDFViewer.cc 2007-02-27 23:05:52.000000000 +0100 +++ xpdf-3.02.fix/xpdf/XPDFViewer.cc 2008-05-04 21:29:34.000000000 +0200 @@ -834,6 +834,9 @@ void XPDFViewer::cmdFocusToPageNum(GString *args[], int nArgs, XEvent *event) { + if (core->getFullScreen()) { + return; + } XmTextFieldSetSelection(pageNumText, 0, strlen(XmTextFieldGetString(pageNumText)), XtLastTimestampProcessed(display));
diff -ruN xpdf-3.02.old/xpdf/XPDFViewer.cc xpdf-3.02.feature/xpdf/XPDFViewer.cc --- xpdf-3.02.old/xpdf/XPDFViewer.cc 2007-02-27 23:05:52.000000000 +0100 +++ xpdf-3.02.feature/xpdf/XPDFViewer.cc 2008-05-04 21:14:44.000000000 +0200 @@ -444,11 +444,13 @@ void XPDFViewer::displayPage(int pageA, double zoomA, int rotateA, GBool scrollToTop, GBool addToHist) { + hideFullScreenToolbar(); core->displayPage(pageA, zoomA, rotateA, scrollToTop, addToHist); } void XPDFViewer::displayDest(LinkDest *dest, double zoomA, int rotateA, GBool addToHist) { + hideFullScreenToolbar(); core->displayDest(dest, zoomA, rotateA, addToHist); } @@ -791,6 +793,7 @@ void XPDFViewer::cmdCloseWindow(GString *args[], int nArgs, XEvent *event) { + hideFullScreenToolbar(); app->close(this, gFalse); } @@ -829,11 +832,25 @@ void XPDFViewer::cmdFocusToDocWin(GString *args[], int nArgs, XEvent *event) { + hideFullScreenToolbar(); core->takeFocus(); } void XPDFViewer::cmdFocusToPageNum(GString *args[], int nArgs, XEvent *event) { + if (toolBar == None) { + int n = 0; + Arg myArgs[20]; + initToolbar(form); + n = 0; + XtSetArg(myArgs[n], XmNleftAttachment, XmATTACH_FORM); ++n; + XtSetArg(myArgs[n], XmNrightAttachment, XmATTACH_FORM); ++n; + XtSetArg(myArgs[n], XmNtopAttachment, XmATTACH_FORM); ++n; + XtSetValues(toolBar, myArgs, n); + + setButtonBitmaps(); + updateCbk(this, NULL, core->getPageNum(), core->getDoc()->getNumPages(), NULL); + } XmTextFieldSetSelection(pageNumText, 0, strlen(XmTextFieldGetString(pageNumText)), XtLastTimestampProcessed(display)); @@ -930,6 +947,7 @@ XEvent *event) { int pg; + puts("cmdGotoPage"); pg = atoi(args[0]->getCString()); if (pg < 1 || pg > core->getDoc()->getNumPages()) { return; @@ -1009,11 +1027,13 @@ void XPDFViewer::cmdPageDown(GString *args[], int nArgs, XEvent *event) { + hideFullScreenToolbar(); core->scrollPageDown(); } void XPDFViewer::cmdPageUp(GString *args[], int nArgs, XEvent *event) { + hideFullScreenToolbar(); core->scrollPageUp(); } @@ -1046,6 +1066,7 @@ void XPDFViewer::cmdQuit(GString *args[], int nArgs, XEvent *event) { + hideFullScreenToolbar(); app->quit(); } @@ -1270,6 +1291,7 @@ void XPDFViewer::cmdStartSelection(GString *args[], int nArgs, XEvent *event) { + hideFullScreenToolbar(); core->startSelection(mouseX(event), mouseY(event)); } @@ -1440,24 +1462,29 @@ } XmAddWMProtocolCallback(win, XInternAtom(display, "WM_DELETE_WINDOW", False), &closeMsgCbk, this); + + if (app->getGeometry()) { + n = 0; + XtSetArg(args[n], XmNgeometry, app->getGeometry()->getCString()); ++n; + XtSetValues(win, args, n); + } + + n = 0; + form = XmCreateForm(win, "form", args, n); + XtManageChild(form); // create the full-screen window if (fullScreen) { - initCore(win, gTrue); + initCore(form, gTrue); + n = 0; + XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; + XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; + XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; + XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; + XtSetValues(core->getWidget(), args, n); // create the normal (non-full-screen) window } else { - if (app->getGeometry()) { - n = 0; - XtSetArg(args[n], XmNgeometry, app->getGeometry()->getCString()); ++n; - XtSetValues(win, args, n); - } - - n = 0; - form = XmCreateForm(win, "form", args, n); - XtManageChild(form); - -#ifdef DISABLE_OUTLINE initToolbar(form); n = 0; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; @@ -1465,6 +1492,7 @@ XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; XtSetValues(toolBar, args, n); +#ifdef DISABLE_OUTLINE initCore(form, gFalse); n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; @@ -1474,13 +1502,6 @@ XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; XtSetValues(core->getWidget(), args, n); #else - initToolbar(form); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetValues(toolBar, args, n); - initPanedWin(form); n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; @@ -2029,12 +2050,200 @@ #endif } +void XPDFViewer::hideFullScreenToolbar() { + if (core->getFullScreen() && toolBar != None) { + XtUnmanageChild(toolBar); + toolBar = None; + } +} + +void XPDFViewer::setButtonBitmaps() { + int depth; + Pixel fg, bg, arm; + + XtVaGetValues(backBtn, XmNdepth, &depth, + XmNforeground, &fg, XmNbackground, &bg, + XmNarmColor, &arm, NULL); + XtVaSetValues(backBtn, XmNlabelType, XmPIXMAP, + XmNlabelPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)backArrow_bits, + backArrow_width, + backArrow_height, + fg, bg, depth), + XmNarmPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)backArrow_bits, + backArrow_width, + backArrow_height, + fg, arm, depth), + XmNlabelInsensitivePixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)backArrowDis_bits, + backArrowDis_width, + backArrowDis_height, + fg, bg, depth), + NULL); + XtVaSetValues(prevTenPageBtn, XmNlabelType, XmPIXMAP, + XmNlabelPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)dblLeftArrow_bits, + dblLeftArrow_width, + dblLeftArrow_height, + fg, bg, depth), + XmNarmPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)dblLeftArrow_bits, + dblLeftArrow_width, + dblLeftArrow_height, + fg, arm, depth), + XmNlabelInsensitivePixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)dblLeftArrowDis_bits, + dblLeftArrowDis_width, + dblLeftArrowDis_height, + fg, bg, depth), + NULL); + XtVaSetValues(prevPageBtn, XmNlabelType, XmPIXMAP, + XmNlabelPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)leftArrow_bits, + leftArrow_width, + leftArrow_height, + fg, bg, depth), + XmNarmPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)leftArrow_bits, + leftArrow_width, + leftArrow_height, + fg, arm, depth), + XmNlabelInsensitivePixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)leftArrowDis_bits, + leftArrowDis_width, + leftArrowDis_height, + fg, bg, depth), + NULL); + XtVaSetValues(nextPageBtn, XmNlabelType, XmPIXMAP, + XmNlabelPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)rightArrow_bits, + rightArrow_width, + rightArrow_height, + fg, bg, depth), + XmNarmPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)rightArrow_bits, + rightArrow_width, + rightArrow_height, + fg, arm, depth), + XmNlabelInsensitivePixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)rightArrowDis_bits, + rightArrowDis_width, + rightArrowDis_height, + fg, bg, depth), + NULL); + XtVaSetValues(nextTenPageBtn, XmNlabelType, XmPIXMAP, + XmNlabelPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)dblRightArrow_bits, + dblRightArrow_width, + dblRightArrow_height, + fg, bg, depth), + XmNarmPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)dblRightArrow_bits, + dblRightArrow_width, + dblRightArrow_height, + fg, arm, depth), + XmNlabelInsensitivePixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)dblRightArrowDis_bits, + dblRightArrowDis_width, + dblRightArrowDis_height, + fg, bg, depth), + NULL); + XtVaSetValues(forwardBtn, XmNlabelType, XmPIXMAP, + XmNlabelPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)forwardArrow_bits, + forwardArrow_width, + forwardArrow_height, + fg, bg, depth), + XmNarmPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)forwardArrow_bits, + forwardArrow_width, + forwardArrow_height, + fg, arm, depth), + XmNlabelInsensitivePixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)forwardArrowDis_bits, + forwardArrowDis_width, + forwardArrowDis_height, + fg, bg, depth), + NULL); + XtVaSetValues(findBtn, XmNlabelType, XmPIXMAP, + XmNlabelPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)find_bits, + find_width, + find_height, + fg, bg, depth), + XmNarmPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)find_bits, + find_width, + find_height, + fg, arm, depth), + XmNlabelInsensitivePixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)findDis_bits, + findDis_width, + findDis_height, + fg, bg, depth), + NULL); + XtVaSetValues(printBtn, XmNlabelType, XmPIXMAP, + XmNlabelPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)print_bits, + print_width, + print_height, + fg, bg, depth), + XmNarmPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)print_bits, + print_width, + print_height, + fg, arm, depth), + XmNlabelInsensitivePixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)printDis_bits, + printDis_width, + printDis_height, + fg, bg, depth), + NULL); + XtVaSetValues(aboutBtn, XmNlabelType, XmPIXMAP, + XmNlabelPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)about_bits, + about_width, + about_height, + fg, bg, depth), + XmNarmPixmap, + XCreatePixmapFromBitmapData(display, XtWindow(toolBar), + (char *)about_bits, + about_width, + about_height, + fg, arm, depth), + NULL); +} + void XPDFViewer::mapWindow() { #ifdef HAVE_X11_XPM_H Pixmap iconPixmap; #endif - int depth; - Pixel fg, bg, arm; // show the window XtPopup(win, XtGrabNone); @@ -2050,183 +2259,7 @@ // set button bitmaps (must be done after the window is mapped) if (toolBar != None) { - XtVaGetValues(backBtn, XmNdepth, &depth, - XmNforeground, &fg, XmNbackground, &bg, - XmNarmColor, &arm, NULL); - XtVaSetValues(backBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)backArrow_bits, - backArrow_width, - backArrow_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)backArrow_bits, - backArrow_width, - backArrow_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)backArrowDis_bits, - backArrowDis_width, - backArrowDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(prevTenPageBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblLeftArrow_bits, - dblLeftArrow_width, - dblLeftArrow_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblLeftArrow_bits, - dblLeftArrow_width, - dblLeftArrow_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblLeftArrowDis_bits, - dblLeftArrowDis_width, - dblLeftArrowDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(prevPageBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)leftArrow_bits, - leftArrow_width, - leftArrow_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)leftArrow_bits, - leftArrow_width, - leftArrow_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)leftArrowDis_bits, - leftArrowDis_width, - leftArrowDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(nextPageBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)rightArrow_bits, - rightArrow_width, - rightArrow_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)rightArrow_bits, - rightArrow_width, - rightArrow_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)rightArrowDis_bits, - rightArrowDis_width, - rightArrowDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(nextTenPageBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblRightArrow_bits, - dblRightArrow_width, - dblRightArrow_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblRightArrow_bits, - dblRightArrow_width, - dblRightArrow_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblRightArrowDis_bits, - dblRightArrowDis_width, - dblRightArrowDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(forwardBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)forwardArrow_bits, - forwardArrow_width, - forwardArrow_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)forwardArrow_bits, - forwardArrow_width, - forwardArrow_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)forwardArrowDis_bits, - forwardArrowDis_width, - forwardArrowDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(findBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)find_bits, - find_width, - find_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)find_bits, - find_width, - find_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)findDis_bits, - findDis_width, - findDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(printBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)print_bits, - print_width, - print_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)print_bits, - print_width, - print_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)printDis_bits, - printDis_width, - printDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(aboutBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)about_bits, - about_width, - about_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)about_bits, - about_width, - about_height, - fg, arm, depth), - NULL); + setButtonBitmaps(); } } diff -ruN xpdf-3.02.old/xpdf/XPDFViewer.h xpdf-3.02.feature/xpdf/XPDFViewer.h --- xpdf-3.02.old/xpdf/XPDFViewer.h 2007-02-27 23:05:52.000000000 +0100 +++ xpdf-3.02.feature/xpdf/XPDFViewer.h 2008-05-04 20:57:55.000000000 +0200 @@ -181,6 +181,8 @@ void initCore(Widget parent, GBool fullScreen); void initPopupMenu(); void addToolTip(Widget widget, char *text); + void hideFullScreenToolbar(); + void setButtonBitmaps(); void mapWindow(); void closeWindow(); int getZoomIdx();
signature.asc
Description: Digital signature