[Kde-graphics-devel] Re: Using libksane from a non-graphical application

Kåre Särs kare.sars at iki.fi
Wed Apr 27 12:50:20 CEST 2011


On Wednesday 27 April 2011 12:27:25 Ben Martin wrote:
> On Wed, 2011-04-27 at 10:09 +0300, Kåre Särs wrote:
> > On Tuesday 26 April 2011 13:26:25 Ben Martin wrote:
> > > Hi,
> > >   I decided to allow libferris to mount scanners at long last. The
> > > basics of this exposure is to configure sane and grab an image to jpg or
> > > png. The code in skanlite does very similar things, but as a filesystem
> > > I don't create any graphical interface. 
> > > 
> > >   It turns out that things work well from the console, though the calls
> > > to KMessageBox::sorry() in KSaneWidgetPrivate::oneFinalScanDone() are
> > > quite deadly as the dialog is not shown and the whole thing seems to
> > > hang there. A visit to gdb shows that the dialog is up and not shown in
> > > the backtrace.
> > > 
> > >   Inside imageReady() I call scanCancel() to try to avoid these
> > > KMessageBoxes but it seems I get two scanDone() signals anyway and the
> > > second one complains that the ADF is out of ammo and thus the
> > > KMessageBox is attempted by libksane.
> > 
> > I guess it would not bee to much of a problem to disable those message boxes.
> 
> I have them disabled locally. I'm not sure what the desired KDE way for
> a more standing fix is. My first thought was the make them generated in
> a virtual method in ksane, or maybe as a callback which you can set to
> override.
> 
> The other idea might be to have ksane check if the qapplication instance
> is graphical or not... or just have a setShowErrorsOnConsole( bool )
> maybe?
> 
> > 
> > I have a hunch that you will need an X server running to be able to create a 
> > QWidget... 
> 
> This seemed to be one of the downsides, that and requiring the linking
> of GUI code to get at the scanner. But its probably better to try to
> refactor ksane at some stage than write my own sane wrapper from
> scratch.
> 
> > 
> > > 
> > >   About the only other thing I see that would be handy is a 
> > > QList< QString > getDeviceNames() const;
> > > sort of method to enumerate the scanners. This assumes that there is any
> > > interest in allowing non graphical clients to pick at libksane. Other
> > > than that libksane allows fairly straightforward scanning from the
> > > console. :)
> > 
> > "QList< QString > getDeviceNames() const;" is actually a feature that I have 
> > had in the plans for some time, but I have not had enough of an itch to do it 
> > (nobody using it). It should not be a big problem to implement.
> > 
> > The proper way to it would be to have a "void initGetDeviceList() const;" that 
> > initiates the thread and a signal that returns the device list. This because 
> > the getting of the list can take several seconds. Then a convenience function 
> > that sits and waits for the signal to be returned.
> > 
> > I'll add an entry to the feature plan before the soft freeze and we can check 
> > what it needs to disable the dialogs and add the getDeviceNames().
> 
> Well, I had hacked together a sync method as above. The patch uses the
> async init() and signal that is the much nicer design. So now half the
> things are done :)
> 
> Though you'll want to remove my commenting out the kmessagebox lines in
> the patch.
> 

Thanks, I'll apply the patch as soon as I get a chance :)


I think forwarding the error to the application in stead of showing them as dialog 
box would be better. I'll add a signal that the application can connect to and if the 
signal is connected the dialog will not be shown. That should not break the API or ABI


> > 
> > > 
> > > (oh, I'm not on list, please CC relies if any).
> > 
> > Sure, I'm happy if somebody wants to use/improve libksane :)
> 
> Thanks for creating & working on it! It definitely made adding scanner
> support fairly quick. libksane is the code (updated to use the attached
> patch) that I used to add this:
> http://monkeyiq.blogspot.com/2011/04/blocking-nostril.html
> 

:)


/Kåre


More information about the Kde-graphics-devel mailing list