mirror of
https://github.com/Llewellynvdm/Tomb.git
synced 2024-11-25 14:17:41 +00:00
desktop installation and mimetypes
and more updates
This commit is contained in:
parent
626f6ea781
commit
c00a1721c8
14
configure.ac
14
configure.ac
@ -4,14 +4,14 @@ dnl ==============================================================
|
||||
|
||||
AC_PREREQ([2.60])
|
||||
|
||||
AC_INIT([Tomb],[0.8.0],[jaromil@dyne.org],[tomb])
|
||||
AC_INIT([Tomb],[0.9.0],[jaromil@dyne.org],[Tomb])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
dnl backwards compatibility for autoconf >= 2.64
|
||||
dnl PACKAGE_URL should be the fifth argument of AC_INIT
|
||||
m4_define([AC_PACKAGE_URL], [http://crypto.dyne.org])
|
||||
m4_define([AC_PACKAGE_URL], [http://tomb.dyne.org])
|
||||
AC_DEFINE(PACKAGE_URL, "AC_PACKAGE_URL", [Package URL])
|
||||
AC_SUBST(PACKAGE_URL, AC_PACKAGE_URL)
|
||||
|
||||
@ -69,6 +69,10 @@ AC_PROG_INSTALL
|
||||
|
||||
AC_CHECK_PROG(have_zsh,zsh,yes,no)
|
||||
AC_CHECK_PROG(have_cryptsetup,cryptsetup,yes,no)
|
||||
AC_CHECK_PROG(have_wipe,wipe,yes,no)
|
||||
AC_CHECK_PROG(have_dcfldd,dcfldd,yes,no)
|
||||
AC_CHECK_PROG(have_gksu,gksu,yes,no)
|
||||
AC_CHECK_PROG(have_sudo,gksu,yes,no)
|
||||
|
||||
PKG_CHECK_MODULES(GTK2, gtk+-2.0 >= 2.16, :,
|
||||
AC_MSG_ERROR([*** Gtk+2 >=2.16 development files not found!]))
|
||||
@ -80,6 +84,12 @@ PKG_CHECK_MODULES(NOTIFY, libnotify, :,
|
||||
AC_SUBST([NOTIFY_CFLAGS])
|
||||
AC_SUBST([NOTIFY_LIBS])
|
||||
|
||||
PACKAGE_DATA_DIR='${prefix}/share/tomb'
|
||||
AC_SUBST(PACKAGE_DATA_DIR)
|
||||
# mime TODO see http://www.freedesktop.org/wiki/Specifications/AddingMIMETutor
|
||||
XDG_DATA_DIR='${prefix}/share/mime/packages'
|
||||
AC_SUBST(XDG_DATA_DIR)
|
||||
|
||||
dnl alphabetic order on dir/subdir, but Makefile sorts before everything
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
|
@ -1,11 +1,11 @@
|
||||
|
||||
bin_SCRIPTS = tomb
|
||||
bin_SCRIPTS = tomb tomb-open
|
||||
|
||||
bin_PROGRAMS = tomb-gtk tomb-notify
|
||||
bin_PROGRAMS = tomb-status tomb-notify
|
||||
|
||||
tomb_gtk_SOURCES = tomb-gtk.cpp
|
||||
tomb_gtk_LDADD = @GTK2_LIBS@ @NOTIFY_LIBS@
|
||||
tomb_gtk_CXXFLAGS = @GTK2_CFLAGS@ @NOTIFY_CFLAGS@
|
||||
tomb_status_SOURCES = tomb-status.cpp
|
||||
tomb_status_LDADD = @GTK2_LIBS@ @NOTIFY_LIBS@
|
||||
tomb_status_CXXFLAGS = @GTK2_CFLAGS@ @NOTIFY_CFLAGS@
|
||||
|
||||
tomb_notify_SOURCES = tomb-notify.cpp
|
||||
tomb_notify_LDADD = @NOTIFY_LIBS@
|
||||
|
111
src/tomb
111
src/tomb
@ -55,10 +55,11 @@ else
|
||||
WIPE="rm -f"
|
||||
fi
|
||||
|
||||
# usb auto detect
|
||||
# usb auto detect using dmesg
|
||||
# tested on ubuntu 10.04 - please test and patch on other systems if you can
|
||||
ask_usbkey() {
|
||||
notice "looking for key $1 on usb"
|
||||
exec_as_user tomb-notify "Tomb needs a key." "Plug your usb key in the computer to open $1"
|
||||
echo -n " . please insert your usb key "
|
||||
|
||||
plugged=false
|
||||
@ -83,7 +84,7 @@ ask_usbkey() {
|
||||
# get the first partition
|
||||
usbpart=`dmesg |tail -n 8 | grep ' sd.:' |cut -d: -f2 |tr -d ' '`
|
||||
|
||||
# what that it is mounted
|
||||
# wait that is mounted
|
||||
mounted=false
|
||||
while [ "$mounted" != "true" ]; do
|
||||
cat /proc/mounts | tail -n 2 | grep -q $usbpart
|
||||
@ -336,10 +337,10 @@ mount_tomb() {
|
||||
|
||||
notice "mounting $FILE on mountpoint $MOUNT"
|
||||
if [ -z $MOUNT ]; then
|
||||
error "you need to specify a MOUNTPOINT for the mount command"
|
||||
exit 0
|
||||
fi
|
||||
if ! [ -x $MOUNT ]; then
|
||||
act "mountpoint not specified, using default: /media/$FILE"
|
||||
MOUNT=/media/${FILE}
|
||||
mkdir -p $MOUNT
|
||||
elif ! [ -x $MOUNT ]; then
|
||||
error "mountpoint $MOUNT doesn't exist"
|
||||
exit 0
|
||||
fi
|
||||
@ -413,7 +414,7 @@ mount_tomb() {
|
||||
|
||||
notice "encrypted storage $FILE succesfully mounted on $MOUNT"
|
||||
if [ $DISPLAY ]; then
|
||||
exec_as_user tomb-gtk ${FILE} ${MOUNT}
|
||||
exec_as_user tomb-status ${FILE} ${MOUNT}
|
||||
fi
|
||||
}
|
||||
|
||||
@ -488,16 +489,110 @@ umount_tomb() {
|
||||
exec_as_user tomb-notify "Tomb closed:" "${FILE}
|
||||
Rest In Peace."
|
||||
}
|
||||
|
||||
# install mime-types, bells and whistles for the desktop
|
||||
# see http://developers.sun.com/solaris/articles/integrating_gnome.html
|
||||
# and freedesktop specs
|
||||
install() {
|
||||
notice "Installing Tomb on your desktop"
|
||||
|
||||
act "updating mimetypes..."
|
||||
cat <<EOF > /tmp/dyne-tomb.xml
|
||||
<?xml version="1.0"?>
|
||||
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
|
||||
<mime-type type="application/x-tomb-volume">
|
||||
<comment>Tomb encrypted volume</comment>
|
||||
<glob pattern="*.tomb"/>
|
||||
</mime-type>
|
||||
<mime-type type="application/x-tomb-key">
|
||||
<comment>Tomb crypto key</comment>
|
||||
<glob pattern="*.tomb.gpg"/>
|
||||
</mime-type>
|
||||
</mime-info>
|
||||
EOF
|
||||
xdg-mime install /tmp/dyne-tomb.xml
|
||||
xdg-icon-resource install --context mimetypes --size 32 monmort.xpm monmort
|
||||
xdg-icon-resource install --size 32 monmort.xpm dyne-monmort
|
||||
|
||||
rm /tmp/dyne-tomb.xml
|
||||
|
||||
act "updating desktop..."
|
||||
cat <<EOF > /usr/share/applications/tomb.desktop
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Name=Tomb crypto undertaker
|
||||
GenericName=Crypto undertaker
|
||||
Comment=Keep your bones safe
|
||||
Exec=tomb-open %U
|
||||
TryExec=tomb-open
|
||||
Icon=monmort.xpm
|
||||
Terminal=true
|
||||
Categories=Utility;Security;Archiving;Filesystem;
|
||||
MimeType=application/x-tomb-volume;
|
||||
EOF
|
||||
update-desktop-database
|
||||
|
||||
act "updating menus..."
|
||||
cat <<EOF > /etc/menu/tomb
|
||||
?package(tomb):command="tomb" icon="/usr/share/pixmaps/monmort.xpm" needs="cryptsetup" \
|
||||
section="Applications/Accessories" title="Tomb" hints="Crypto" \
|
||||
hotkey="Tomb"
|
||||
EOF
|
||||
update-menus
|
||||
|
||||
act "updating mime info..."
|
||||
cat <<EOF > /usr/share/mime-info/tomb.keys
|
||||
# actions for encrypted tomb storage
|
||||
application/x-tomb-volume:
|
||||
open=tomb-open %f
|
||||
view=tomb-open %f
|
||||
icon-filename=monmort.xpm
|
||||
short_list_application_ids_for_novice_user_level=tomb
|
||||
EOF
|
||||
cat <<EOF > /usr/share/mime-info/tomb.mime
|
||||
# mime type for encrypted tomb storage
|
||||
application/x-tomb-volume
|
||||
ext: tomb
|
||||
|
||||
application/x-tomb-key
|
||||
ext: tomb.gpg
|
||||
EOF
|
||||
cat <<EOF > /usr/lib/mime/packages/tomb
|
||||
application/x-tomb-volume; tomb '%s'; needsterminal; priority=8
|
||||
EOF
|
||||
update-mime
|
||||
|
||||
act "updating application entry..."
|
||||
|
||||
cat <<EOF > /usr/share/application-registry/tomb.applications
|
||||
tomb
|
||||
command=tomb-open
|
||||
name=Tomb - Crypto Undertaker
|
||||
can_open_multiple_files=false
|
||||
expects_uris=false
|
||||
requires_terminal=true
|
||||
mime-types=application/x-tomb-volume,application/x-tomb-key
|
||||
EOF
|
||||
|
||||
}
|
||||
|
||||
|
||||
case "$CMD" in
|
||||
create) create_tomb ;;
|
||||
format) format_tomb ;;
|
||||
|
||||
mount) mount_tomb ;;
|
||||
open) mount_tomb ;;
|
||||
|
||||
umount) umount_tomb ;;
|
||||
unmount) umount_tomb ;;
|
||||
close) umount_tomb ;;
|
||||
|
||||
install) install ;;
|
||||
|
||||
status) tomb-status ;;
|
||||
notify) tomb-notify ;;
|
||||
|
||||
*) error "command \"$CMD\" not recognized"
|
||||
act "try -h for help"
|
||||
;;
|
||||
|
@ -1,99 +0,0 @@
|
||||
/* Tomb - encrypted storage undertaker
|
||||
*
|
||||
* (c) Copyright 2007-2011 Denis Roio <jaromil@dyne.org>
|
||||
*
|
||||
* This source code is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Public License as published
|
||||
* by the Free Software Foundation; either version 3 of the License,
|
||||
* or (at your option) any later version.
|
||||
*
|
||||
* This source code is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* Please refer to the GNU Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Public License along with
|
||||
* this source code; if not, write to:
|
||||
* Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <libnotify/notify.h>
|
||||
|
||||
/* The Tomb icon is an artwork by Jordi aka MonMort
|
||||
a nomadic graffiti artist from Barcelona */
|
||||
#include <monmort.xpm>
|
||||
|
||||
GtkStatusIcon *status_tomb;
|
||||
GtkMenu *menu_tomb;
|
||||
|
||||
NotifyNotification *notice;
|
||||
GError *error;
|
||||
|
||||
// forward declaration of callbacks
|
||||
gboolean left_click(GtkWidget *w, GdkEvent *e);
|
||||
gboolean cb_close(GtkWidget *w, GdkEvent *e);
|
||||
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
GObject *tray;
|
||||
GdkPixbuf *pb_monmort;
|
||||
GtkWidget *menu_close;
|
||||
gint menu_x, menu_y;
|
||||
gboolean push_in = true;
|
||||
|
||||
char tomb_file[512];
|
||||
|
||||
gtk_set_locale();
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
// libnotify
|
||||
notify_init(PACKAGE);
|
||||
|
||||
// set and show the status icon
|
||||
pb_monmort = gdk_pixbuf_new_from_xpm_data(monmort);
|
||||
status_tomb = gtk_status_icon_new_from_pixbuf(pb_monmort);
|
||||
// gtk_status_icon_set_name(status_tomb, "tomb");
|
||||
gtk_status_icon_set_title(status_tomb, "Tomb");
|
||||
gtk_status_icon_set_tooltip_text (status_tomb, "Tomb - crypto undertaker");
|
||||
|
||||
// gtk_status_icon_set_blinking(status_tomb, true);
|
||||
menu_tomb = (GtkMenu*) gtk_menu_new();
|
||||
|
||||
menu_close = gtk_menu_item_new_with_label("Close");
|
||||
gtk_menu_attach(menu_tomb, menu_close, 0, 1, 0, 1);
|
||||
g_signal_connect_swapped(menu_close, "activate", G_CALLBACK(cb_close), NULL);
|
||||
gtk_widget_show(menu_close);
|
||||
|
||||
g_signal_connect_swapped(status_tomb, "activate", G_CALLBACK(left_click), menu_tomb);
|
||||
|
||||
notice = notify_notification_new_with_status_icon
|
||||
("Tomb encrypted undertaker",
|
||||
"We started digging out bones",
|
||||
NULL, status_tomb);
|
||||
notify_notification_set_icon_from_pixbuf(notice, pb_monmort);
|
||||
|
||||
notify_notification_show(notice, &error);
|
||||
|
||||
gtk_main();
|
||||
|
||||
notify_uninit();
|
||||
|
||||
exit(0);
|
||||
|
||||
}
|
||||
|
||||
// callbacks
|
||||
gboolean left_click(GtkWidget *w, GdkEvent *e) {
|
||||
gtk_menu_popup(menu_tomb, NULL, NULL,
|
||||
gtk_status_icon_position_menu, status_tomb,
|
||||
1, gtk_get_current_event_time());
|
||||
}
|
||||
gboolean cb_close(GtkWidget *w, GdkEvent *e) {
|
||||
execlp("tomb","tomb","-S","umount",NULL);
|
||||
gtk_main_quit();
|
||||
}
|
@ -63,8 +63,6 @@ int main(int argc, char **argv) {
|
||||
|
||||
notify_uninit();
|
||||
|
||||
usleep(.5);
|
||||
|
||||
exit(0);
|
||||
|
||||
}
|
||||
|
12
src/tomb-open
Executable file
12
src/tomb-open
Executable file
@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
# startup wrapper to open tombs
|
||||
|
||||
# got a tomb as argument
|
||||
if [ $@ ]; then
|
||||
tomb -S open $@
|
||||
exit $?
|
||||
fi
|
||||
|
||||
tomb -h
|
||||
|
||||
sleep 10
|
179
src/tomb-status.cpp
Normal file
179
src/tomb-status.cpp
Normal file
@ -0,0 +1,179 @@
|
||||
/* Tomb - encrypted storage undertaker
|
||||
*
|
||||
* (c) Copyright 2007-2011 Denis Roio <jaromil@dyne.org>
|
||||
*
|
||||
* This source code is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Public License as published
|
||||
* by the Free Software Foundation; either version 3 of the License,
|
||||
* or (at your option) any later version.
|
||||
*
|
||||
* This source code is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* Please refer to the GNU Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Public License along with
|
||||
* this source code; if not, write to:
|
||||
* Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <libnotify/notify.h>
|
||||
|
||||
/* The Tomb icon is an artwork by Jordi aka MonMort
|
||||
a nomadic graffiti artist from Barcelona */
|
||||
#include <monmort.xpm>
|
||||
|
||||
GdkPixbuf *pb_monmort;
|
||||
GtkStatusIcon *status_tomb;
|
||||
GtkMenu *menu_left, *menu_right;
|
||||
|
||||
NotifyNotification *notice;
|
||||
GError *error;
|
||||
|
||||
char filename[256];
|
||||
char mountpoint[256];
|
||||
|
||||
// forward declaration of callbacks
|
||||
gboolean left_click(GtkWidget *w, GdkEvent *e);
|
||||
gboolean cb_view(GtkWidget *w, GdkEvent *e);
|
||||
gboolean cb_close(GtkWidget *w, GdkEvent *e);
|
||||
|
||||
gboolean right_click(GtkWidget *w, GdkEvent *e);
|
||||
gboolean cb_about(GtkWidget *w, GdkEvent *e);
|
||||
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
GObject *tray;
|
||||
GtkWidget *item_close, *item_view, *item_about;
|
||||
gint menu_x, menu_y;
|
||||
gboolean push_in = true;
|
||||
|
||||
char tomb_file[512];
|
||||
|
||||
gtk_set_locale();
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
// get the information from commandline
|
||||
if(argc<3) sprintf(mountpoint,"unknown");
|
||||
else snprintf(mountpoint,255, "%s", argv[2]);
|
||||
|
||||
if(argc<2) sprintf(filename, "unknown");
|
||||
else snprintf(filename,255, "%s", argv[1]);
|
||||
|
||||
// libnotify
|
||||
notify_init(PACKAGE);
|
||||
|
||||
// set and show the status icon
|
||||
pb_monmort = gdk_pixbuf_new_from_xpm_data(monmort);
|
||||
status_tomb = gtk_status_icon_new_from_pixbuf(pb_monmort);
|
||||
// gtk_status_icon_set_name(status_tomb, "tomb");
|
||||
gtk_status_icon_set_title(status_tomb, "Tomb");
|
||||
gtk_status_icon_set_tooltip_text (status_tomb, "Tomb - crypto undertaker");
|
||||
|
||||
// LEFT click menu
|
||||
menu_left = (GtkMenu*) gtk_menu_new();
|
||||
// view
|
||||
item_view = gtk_menu_item_new_with_label("View");
|
||||
gtk_menu_attach(menu_left, item_view, 0, 1, 0, 1);
|
||||
g_signal_connect_swapped(item_view, "activate", G_CALLBACK(cb_view), NULL);
|
||||
gtk_widget_show(item_view);
|
||||
// close
|
||||
item_close = gtk_menu_item_new_with_label("Close");
|
||||
gtk_menu_attach(menu_left, item_close, 0, 1, 1, 2);
|
||||
g_signal_connect_swapped(item_close, "activate", G_CALLBACK(cb_close), NULL);
|
||||
gtk_widget_show(item_close);
|
||||
|
||||
// connect it
|
||||
g_signal_connect_swapped(status_tomb, "activate", G_CALLBACK(left_click), menu_left);
|
||||
|
||||
|
||||
// RIGHT click menu
|
||||
menu_right = (GtkMenu*) gtk_menu_new();
|
||||
// about
|
||||
item_about = gtk_menu_item_new_with_label("About");
|
||||
gtk_menu_attach(menu_right, item_about, 0, 1, 0, 1);
|
||||
g_signal_connect_swapped(item_about, "activate", G_CALLBACK(cb_about), NULL);
|
||||
g_signal_connect_swapped(item_about, "popup-menu", G_CALLBACK(cb_about), NULL);
|
||||
gtk_widget_show(item_about);
|
||||
// connect it
|
||||
g_signal_connect_swapped(status_tomb, "popup-menu", G_CALLBACK(right_click), menu_right);
|
||||
|
||||
// status icon
|
||||
notice = notify_notification_new_with_status_icon
|
||||
("Tomb encrypted undertaker",
|
||||
"We started digging out bones",
|
||||
NULL, status_tomb);
|
||||
notify_notification_set_icon_from_pixbuf(notice, pb_monmort);
|
||||
|
||||
notify_notification_show(notice, &error);
|
||||
|
||||
gtk_main();
|
||||
|
||||
notify_uninit();
|
||||
|
||||
exit(0);
|
||||
|
||||
}
|
||||
|
||||
// callbacks left click
|
||||
gboolean left_click(GtkWidget *w, GdkEvent *e) {
|
||||
gtk_menu_popup(menu_left, NULL, NULL,
|
||||
gtk_status_icon_position_menu, status_tomb,
|
||||
1, gtk_get_current_event_time());
|
||||
}
|
||||
gboolean cb_view(GtkWidget *w, GdkEvent *e) {
|
||||
GtkWidget *dialog =
|
||||
gtk_message_dialog_new (NULL,
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_INFO,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"Tomb '%s' open on '%s'", filename, mountpoint);
|
||||
gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
gtk_widget_destroy (dialog);
|
||||
|
||||
}
|
||||
|
||||
gboolean cb_close(GtkWidget *w, GdkEvent *e) {
|
||||
execlp("tomb","tomb","-S","umount",NULL);
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
// callbacks right click
|
||||
gboolean right_click(GtkWidget *w, GdkEvent *e) {
|
||||
gtk_menu_popup(menu_right, NULL, NULL,
|
||||
gtk_status_icon_position_menu, status_tomb,
|
||||
1, gtk_get_current_event_time());
|
||||
}
|
||||
gboolean cb_about(GtkWidget *w, GdkEvent *e) {
|
||||
const gchar *authors[] = {"Denis Roio aka Jaromil - http://jaromil.dyne.org",NULL};
|
||||
const gchar *artists[] = {"Jordi aka MonMort - http://monmort.blogspot.org",
|
||||
"Gabriele Zaverio aka Asbesto - http://freaknet.org/asbesto",
|
||||
NULL};
|
||||
GtkWidget *dialog = gtk_about_dialog_new();
|
||||
gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(dialog), PACKAGE);
|
||||
gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(dialog), VERSION);
|
||||
gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog),
|
||||
"(C)2007-2010 Denis Roio aka Jaromil");
|
||||
gtk_about_dialog_set_artists(GTK_ABOUT_DIALOG(dialog), artists);
|
||||
gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(dialog), authors);
|
||||
|
||||
gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog),
|
||||
"The Crypto Undertaker\n"
|
||||
"\n"
|
||||
"This program helps people keeping their bones together by taking care of their private data inside encrypted storage filesystems that are easy to access and transport.\n"
|
||||
"\n"
|
||||
"The level of security provided by this program is fairly good: it uses an accelerated AES/SHA256 (cbc-essiv) to access the data on the fly, as if it would be a mounted volume.\n"
|
||||
"\n"
|
||||
"To start digging your tomb be ready to get your hands dirty and use the commandline utility 'tomb' from a text terminal."
|
||||
);
|
||||
gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(dialog), PACKAGE_URL);
|
||||
gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(dialog), pb_monmort);
|
||||
gtk_dialog_run(GTK_DIALOG (dialog));
|
||||
gtk_widget_destroy(dialog);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user