From 5dd087636e42968e6b88a4b6a34401c1ed91af33 Mon Sep 17 00:00:00 2001 From: Marko Nykanen Date: Sun, 22 Nov 2009 08:06:51 +0200 Subject: [PATCH] simpler ui --- data/Makefile.am | 5 +- data/maemo_recorder.desktop | 8 +- data/maemo_recorder.png | Bin 2816 -> 0 bytes data/pause.png | Bin 0 -> 934 bytes data/play.png | Bin 0 -> 1635 bytes data/record.png | Bin 0 -> 2075 bytes data/recorder.png | Bin 0 -> 2816 bytes data/stop.png | Bin 0 -> 965 bytes debian/changelog | 8 + debian/recorder.postinst | 1 + src/maemo-recorder-file.h | 2 +- src/maemo-recorder-ui.c | 457 ++++++++++++++++++++++--------------------- src/maemo-recorder.h | 12 +- src/settings.c | 2 +- 14 files changed, 260 insertions(+), 235 deletions(-) delete mode 100644 data/maemo_recorder.png create mode 100644 data/pause.png create mode 100644 data/play.png create mode 100644 data/record.png create mode 100644 data/recorder.png create mode 100644 data/stop.png diff --git a/data/Makefile.am b/data/Makefile.am index a972a88..9c8912e 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -5,7 +5,10 @@ servicedir = /usr/share/dbus-1/services service_DATA = maemo_recorder.service pixmapdir = $(datadir)/pixmaps -pixmap_DATA = maemo_recorder.png +pixmap_DATA = recorder.png + +pixmapicondir = $(pixmapdir)/recorder +pixmapicon_DATA = record.png play.png stop.png pause.png EXTRA_DIST = \ maemo_recorder.desktop \ diff --git a/data/maemo_recorder.desktop b/data/maemo_recorder.desktop index f81d244..c768a2d 100644 --- a/data/maemo_recorder.desktop +++ b/data/maemo_recorder.desktop @@ -4,10 +4,10 @@ Version=1.0 Type=Application Name=Recorder Exec=/usr/bin/maemo_recorder -Icon=maemo_recorder -X-Window-Icon=maemo_recorder -X-Window-Icon-Dimmed=maemo_recorder -X-Icon-path=/usr/share/pixmaps/ +Icon=recorder +X-Window-Icon=recorder +X-Window-Icon-Dimmed=recorder +X-Icon-path=/usr/share/pixmaps X-HildonDesk-ShowInToolbar=true X-Osso-Service=com.nokia.maemo_recorder X-Osso-Type=application/x-executable diff --git a/data/maemo_recorder.png b/data/maemo_recorder.png deleted file mode 100644 index 01d66be18c7312440c68fc883dfc5bfd0ef6a6db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2816 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 SLr5C{0000gr(UX}F^6Gi? z#FY@-YH%+oq9CXUF+@L5MO_(0L^pnb3$t;f1Oy=vT)6N7v8!BEKdLh`$y860RiDj3 zb8pu<_nv#J2WZfsL4yVj8Z@X43XE?9hyg^$#2f_~A~PnvIDs6#n@1$&32{zWdKRolfuGgS)RxnqHZh ztMX~@>$gV$K2J+1RDh(Z*?9i!<-~xk?aiwIjsKodC{o<^5@85!m;2dm`rvGsJ)*S%AU@&Nf@Zh=v zm@@LjnUHdvk|Y@^%+k_QK}=P^A`oSWDpb{v3o2?*aJ$_u1Z$)q0F;quE?u**urM;@ ztE;QUGiCu101$`(%Vp8~{r+(aVgx}Q=ytos%Oh1VbJhvTEHN7A5i5!%B4C!{SG5$s zyu5sN0;(hwsu4t72SiE|;{^D`m^mY#|CUA=3~n`&dMv z!cft1yL`k#aU7Sq>T=vWq#{0wq99H|?ecwG?tMEFH_pfY-iHB+gV+@Qj=PRHBa^yh> zsy^WEkTgvJxDL!BqW1p*|4?gfum~b@TWm(u?*KC5*%mPYRZLClcBjodU}|%yEx;NJ z!v-)6W(%0DhB4~=NwL<{c04yC7_7lJdBHBN#+y)IAG-%MEL4z~Ge~)^&=ScaTQ~&?~07*qo IM6N<$f;M1;1xZ9fRA_lb@wj}CVq#+Jl`B_zWquVzHGv9n&cGOlq9|x=Yyc6% zgtUnwDQSfD+O?~boNcW`!;OZ<$&;rjg9i_8E-ETg11Z3KeZXus3(uN!0%HV51jZN` zV`yr6fEzbTVKSMpdE-`nM#jR_me$roHFed?>~{OO&6_vBAf=>dCSbK%y#$07oU=zF zoIwJpufK=CZr#Mll`I2%Hhz3PDv>G&VNC;dqGn_;}j0Yp?#~ zsT0$34t$fAG$QG1o6VM6RaJG_ZnyvKOP-!pfC+HMz=hEI-)l27#=sea5JJ1S0OuTv zqN2K{3N_cm-?yS22mbU{l?%S0(<_|xX`xdIl8#cLBY5IP46 z5g4KC*Jqs-AR-82P)UKJxFMwkKxk`o;!gQ(SS(g#ee$Wkva&L6)#{b2PXBn~`iD!G zZ2*wdD+1jrKn%o4lOTXR6(H8NCeprB2_OO#RfSYlFwUW>YNtCv=maDrb1SOO<#IiB zXY{xN00VV~_sFnr6#xJN2?9U>+)zOX3DF}u+J?3^CpK(a-*NYDMeV$K3vyD&rRD?p zt=9x1A|kq;A+I)Jnnia3Pjx)^3xIPDv)PK!P(99^J);~yalHNQx5j<<(bA94an1{f zsN9!4{o@%n6%};> zz*Qo0`8*UX;1`U~+PDK7flv z)Z%LnzXkqV0Rn*-x;86$jZz^53fZ1$DR8(KwF1w9w+qbx4Y%%$3*R20OHa4~Z zz#l}^>wmNKNFXF61nV}g?Wn7(tIU|cFefD?r4ZV5aReye6Y*Q%$g#ujvuDq?rHvnd z@bj$YdC>aYr=xHn@JGN60A*!mKW*Ex{j}L^E&xyxsIl1VNGV?{E-qdorA(Dl_ULsm hNRS{wf&_W)`4_*Y1~Hv16Kntg002ovPDHLkV1m*n70Lhr literal 0 HcmV?d00001 diff --git a/data/record.png b/data/record.png new file mode 100644 index 0000000000000000000000000000000000000000..bf00e5f3933522d9ed1441f31c04f211bc93c16c GIT binary patch literal 2075 zcmV+$2;}#PP)$kD0Im$G+J{P2K`7$#21sosB%-Qh!`Qnm75`gC??&&>RP=ljl? zvkNO)(TY~Iq80rQODyyKQb0Ox6M&4*E1(H@fE%~VqU8V(KsV6+2yFWb+|@0_Z3dLk zx)AjcGa*dRY5m4W@TaHYG%y#3zSf6di!y2G`#F4XP>9D<`FyT_XsD}u&6KE&z);dS1P_YH&+|i`WL^1KYCCF>i-RZ!rid-E+KxM>+iq*hCO@IneJ}< z$w?YhQ-rpSa$NvqI*pOdk}Q`oSFgsMon?G<)U8cV|KpWR=8@y8R{izt*|XDMCP3)` z+_v2?elxUpZ?-TvD4qA;$E#G3rb&9!CXxdK7?}*p_X+3b@Fpf`Oih8-bX|Wvna!J- znV3-HCr>&bf4k7ML=6z;qeYxiyd zbfbZ8G*Cf+_I*?k5YEhCpE`we<_riycE=6^Df#%#H{B1{u6^XpjvcSQ^wLX{S7XMw zO7oc?z)iza{(kfDaL$;W#U33cyLBrA_uo&~>ebL}qJ1A71QCGmqnk~1qX9s&RHAF` zT7s!5yh;Vrvgp0>#-tt_yFDzGj&B(msg910I{yg(0Sx?1h{Hp>cMql#2~j_Firk(( z6h=lssfAIGjVs@e&iVc#C;+ourdh4hICqXzu}G%3H<3Jb>Z|VX@L%q@XU3We!nJrt8 zU0paId_cZfG^})baPY0SzR}m$H`uAEjsb>-hDuwtJ~+62yXAiL5h9U@%-i-t)M|va z8me{N2BqqCLf0j9-FYA#hL~&DqQemHlTTQ)VMEqBapEV1LSX|P&d-hjcJ11g`L1nm z>$0rAlx5L4f1cF(_2@91H>YeniuhPN4mb|DF1Rkbt<^0E$3dDVGL<5zR!L>En5LPx zPMo;u<(FUXTQ-1vK3~}6I3vY1Yq}a2E&$PF4BN}Zw$b(ae9(4G45J+fJP+-85rpd! zIu3|vu!Cxqo?_7q-+udR<#PGDPP`>L>6FXm^4*QbH*>{eBKY*v=wTNxk}Q=FQX+&v z3W3%dp%egGDQHC)qMJ=b7@~s!noUFyKoEfM&%f}RGc#EI{fSHC70 z3^8v!hR{-CB$N1_N7Axpfyu4G6?d_d4)~|ohzI3UX=XDnVSoHcJ3SlE-o8@Wm!|J@4oxwL@tL|VqPpY))vN+ z~;6ta~8O;Yyd(CT`HA6+do(IN+5FPDCJN`kVwKjks{o%Un4wg)Fus4%2^z`(+!S-l3-+DJF zr3jTmX-yb^4wXVF1-TrbJC3SqJ^ua4$;W};3L(Nye097Vjc<7D>o2_U%;aaE`Cb@e z6bexmuIxLX4P(iuFX{)#Y!)XBnXFd5y)VA_3~;Pd^H&8B8>^J|?R)*^Lx-L^TdDXC zVD$FRZzI~JwMNHFX6y5kn;~*JY^C_yaq7;r3?J{H20tmH^_ChgG3x;G8nM!eCW=2m`tKQaw2YcP>BReN@nVH zD%Gm5QmM~xJ$(4-RU;#>0w+72xYrEO1~Nn#?j3#f(Qj3refEb^>r~0IlD(E?n27`_ z(*&*Yg8;wLV5VLVFWPpXr1Wlh@WJ2hdh*FXV;IMT5P$!o9D@ z8UWS-WgrK1#b5hC4LA=>0O!9*xvXeKD_YTtR`h?Te*z714-EyY5DWkS002ovPDHLk FV1i+a@?8J` literal 0 HcmV?d00001 diff --git a/data/recorder.png b/data/recorder.png new file mode 100644 index 0000000000000000000000000000000000000000..01d66be18c7312440c68fc883dfc5bfd0ef6a6db GIT binary patch literal 2816 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 SLr5C{0000% z26w!ATks(4)$0l#*JT8Mpok0l6Z`?56cqL>*y3@#xRn_mGApZU$HP?bbbF~6dYWP? zE8iz0q9Pg=En2i_(V|6*_Lj}O|2<$0G>^4^+qP=k*4nl;NfFrXcDuhH`hdAc*0*1M z`6{OLZ05R$nF-;iUw;1e>)mem+k@B4-6N*-?Avd?o4M>^dU^Ze)6Hh{{wzcLZub2T zuLvO!LO>x9Oeh2#r+f2;E=FWIL(K#RW`@jg3^Onc_e6}5&!2w*z-F^q9R)xVGSzRB zkc^-P!;m^sN|-5|HN&t9LVetE-cv05naLO_?DX3O$IiTCM0hqw6A4ABEm@ ze@z7%1FYBU!vUO~oz;goO@q7V2uz|NOd-Rm!%Gx;i0t1c*Y3j}7Z(?Y1K4i2_W*!m z+6qW0skA~8T^9i_kr)87@&0F1-bK1LCmP;Yi}s`q?CbDOa#?!~K2Q zl={05pfXlxv*UDa?v~Q(gyYia8J2`x#P*pWa;%yG{8ATCb>R Sat, 21 Nov 2009 22:17:30 +0200 + recorder (0.3.1) unstable; urgency=low * Name changed to Recorder diff --git a/debian/recorder.postinst b/debian/recorder.postinst index 74f2f1b..bc9840b 100644 --- a/debian/recorder.postinst +++ b/debian/recorder.postinst @@ -22,6 +22,7 @@ case "$1" in update-mime-database /usr/share/mime update-desktop-database -q hildon-update-category-database /usr/share/mime + gconftool -s /apps/maemo-recorder/settings/default_dir "/home/user/MyDocs/.recorder" --type=string ;; abort-upgrade|abort-remove|abort-deconfigure) diff --git a/src/maemo-recorder-file.h b/src/maemo-recorder-file.h index 07da5b8..7544796 100644 --- a/src/maemo-recorder-file.h +++ b/src/maemo-recorder-file.h @@ -41,7 +41,7 @@ G_BEGIN_DECLS #define DEFAULT_TMP_PCMA_FILE "mrec.pcma" #define DEFAULT_TMP_PCMU_FILE "mrec.pcmu" #define DEFAULT_TMP_FILE "mrec.raw" -#define DEFAULT_TMP_WAV_FILE "mrec.wav" +#define DEFAULT_TMP_WAV_FILE "untitled.wav" #define DEFAULT_TMP_ILBC_FILE "mrec.ilbc" /* diff --git a/src/maemo-recorder-ui.c b/src/maemo-recorder-ui.c index 7e7381a..b0e4b75 100644 --- a/src/maemo-recorder-ui.c +++ b/src/maemo-recorder-ui.c @@ -41,7 +41,7 @@ #define DEFAULT_REC_BLOCKSIZE "160" #define STOP_DELAY 500 -#define REC_UPDATE_INTERVAL 750 +#define REC_UPDATE_INTERVAL 500 #define PLAY_UPDATE_INTERVAL 200 /* MACROs */ @@ -97,9 +97,9 @@ static gboolean seekToZero(AppData *data, GstElement *pipeline); static void setLength(AppData *data, gdouble secs); static void setFormatString(AppData *data, AudioFormat afmt); static gboolean cbStopPlayback(AppData *data); -static void cbStop(GtkWidget* widget, AppData *data); -static void cbPlay(GtkWidget* widget, AppData *data); -static void cbRec(GtkWidget* widget, AppData *data); +static void cbStop(GtkWidget* widget, GdkEventButton *event, AppData *data); +static void cbPlay(GtkWidget* widget, GdkEventButton *event, AppData *data); +static void cbRec(GtkWidget* widget, GdkEventButton *event, AppData *data); static void cbNew(GtkWidget* widget, AppData *data); static void cbOpen(GtkWidget* widget, AppData *data); /*static void cbSave(GtkWidget* widget, AppData *data);*/ @@ -392,9 +392,9 @@ static gboolean destroyPipeline(AppData *data, PipeLineType type) ULOG_INFO("%s() - Stopping playback/recording", G_STRFUNC); - hildon_banner_show_information(GTK_WIDGET(data->mainView), NULL, RECORDER_MSG_STOPPED); - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.stateEntry), - RECORDER_MSG_STOPPED); + //hildon_banner_show_information(GTK_WIDGET(data->mainView), NULL, RECORDER_MSG_STOPPED); + gtk_label_set_text(GTK_LABEL(data->mainViewData.stateEntry), ""); + gtk_widget_set_sensitive(data->buttonRec, TRUE); switch (type) { @@ -456,12 +456,12 @@ static void pipelineStateChanged (GstElement *element, g_free(tmp); tmp = NULL; ULOG_INFO("%s() - Recording", G_STRFUNC); - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.stateEntry), + gtk_label_set_text(GTK_LABEL(data->mainViewData.stateEntry), RECORDER_MSG_RECORDING); gtk_widget_set_state(data->buttonRec, GTK_STATE_ACTIVE); - if (data->recUpdateId == 0 && gettimeofday(&data->recStartTv, NULL) == 0) + if (data->recUpdateId == 0) { data->recUpdateId = g_timeout_add_full(G_PRIORITY_DEFAULT_IDLE, REC_UPDATE_INTERVAL, (GSourceFunc) cbUpdateRecLength, data, NULL); } @@ -473,7 +473,7 @@ static void pipelineStateChanged (GstElement *element, g_free(tmp); tmp = NULL; ULOG_INFO("%s() - Playing", G_STRFUNC); - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.stateEntry), + gtk_label_set_text(GTK_LABEL(data->mainViewData.stateEntry), RECORDER_MSG_PLAYING); gtk_widget_set_state(data->buttonPlay, GTK_STATE_ACTIVE); /* @@ -486,8 +486,7 @@ static void pipelineStateChanged (GstElement *element, case GST_STATE_READY: /* hildon_banner_show_information(GTK_WIDGET(data->mainView), NULL, "Ready..."); */ ULOG_INFO("%s() - Ready", G_STRFUNC); - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.stateEntry), - RECORDER_MSG_READY); + gtk_label_set_text(GTK_LABEL(data->mainViewData.stateEntry), ""); break; case GST_STATE_PAUSED: @@ -500,7 +499,7 @@ static void pipelineStateChanged (GstElement *element, if (GST_IS_ELEMENT(data->playPipeline) && gst_element_query_position(data->playPipeline, &fmt, &pos) && pos != 0) { hildon_banner_show_information(GTK_WIDGET(data->mainView), NULL, RECORDER_MSG_PAUSED); - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.stateEntry), + gtk_label_set_text(GTK_LABEL(data->mainViewData.stateEntry), RECORDER_MSG_PAUSED); } gtk_widget_set_state(data->buttonRec, GTK_STATE_NORMAL); @@ -564,9 +563,9 @@ static gboolean cbBus(GstBus *bus, case APPSTATE_PLAYING: /* stop playback after a short break*/ g_timeout_add(STOP_DELAY, (GSourceFunc)cbStopPlayback, data); - hildon_banner_show_information(GTK_WIDGET(app->mainView), NULL, RECORDER_MSG_STOPPED); - gtk_entry_set_text(GTK_ENTRY(app->mainViewData.stateEntry), - RECORDER_MSG_STOPPED); + //hildon_banner_show_information(GTK_WIDGET(app->mainView), NULL, RECORDER_MSG_STOPPED); + gtk_label_set_text(GTK_LABEL(app->mainViewData.stateEntry), + ""); break; @@ -653,6 +652,9 @@ static gboolean cbCheckPosition (AppData *data) if (gst_element_query_position(data->playPipeline, &fmt, &pos)) { gdouble time = GST_TIME_TO_SECS(pos); + guint mins = 0; + gdouble secs; + gchar* tmp; ULOG_DEBUG("pos = %lld, time = %f", pos, @@ -663,6 +665,18 @@ static gboolean cbCheckPosition (AppData *data) GTK_ADJUSTMENT(data->mainViewData.adjustment), time); gtk_adjustment_value_changed(GTK_ADJUSTMENT(data->mainViewData.adjustment)); + if (secs >= 60.0) + { + mins = secs / 60; + secs -= mins * 60.0; + } + + tmp = g_strdup_printf("%02u:%02d", mins, (int)secs); + + gtk_label_set_text(GTK_LABEL(data->mainViewData.ctime), + tmp); + g_free(tmp); + } if (APPSTATE_PLAYING == getAppState(data)) @@ -681,7 +695,12 @@ static void cbNew(GtkWidget* widget, AppData *data) return; /* remove pipelines if existing */ - destroyPipelines(data); + if (APPSTATE_PLAYING == getAppState(data) || APPSTATE_RECORDING == getAppState(data)) { + cbStop(widget, NULL, data); + destroyPipelines(data); + } + + setAppState(data, APPSTATE_READY); ULOG_DEBUG_F("cbNew"); /* destroy tmp file */ @@ -694,12 +713,13 @@ static void cbNew(GtkWidget* widget, AppData *data) data->file_format = FORMAT_NONE; /* update display */ - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.fileNameEntry), + gtk_label_set_text(GTK_LABEL(data->mainViewData.fileNameEntry), RECORDER_FILE_UNTITLED); setLength(data, 0.0); /* update the display + scale */ gtk_adjustment_set_value(GTK_ADJUSTMENT(data->mainViewData.adjustment), 0); + gtk_label_set_text(GTK_LABEL(data->mainViewData.ctime), "00:00"); gtk_widget_set_sensitive(data->buttonSave, FALSE); gtk_widget_set_sensitive(data->buttonSaveAs, FALSE); data->saved = TRUE; @@ -724,6 +744,10 @@ static void cbOpen(GtkWidget* widget, AppData *data) if (!closeFile(data)) return; + if (APPSTATE_PLAYING == getAppState(data) || APPSTATE_RECORDING == getAppState(data)) { + cbStop(widget, NULL, data); + destroyPipelines(data); + } #if 0 /* create filter */ @@ -759,8 +783,15 @@ static void cbOpen(GtkWidget* widget, AppData *data) */ } - if (NULL == selected) /* no file selected */ + if (NULL == selected) + { + /* no file selected */ + if (!g_file_test(getFileName(data), G_FILE_TEST_EXISTS)) + { + cbNew(widget, data); + } return; + } ULOG_INFO("%s() - selected filename = '%s'", G_STRFUNC, selected); @@ -773,7 +804,7 @@ static void cbOpen(GtkWidget* widget, AppData *data) /* update filenames */ basename = g_path_get_basename(selected); - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.fileNameEntry), selected); + gtk_label_set_text(GTK_LABEL(data->mainViewData.fileNameEntry), basename); g_free(basename); g_free(data->openFileName); @@ -846,7 +877,7 @@ openURI(gpointer user_data) /* update filenames */ basename = g_path_get_basename(selected); - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.fileNameEntry), selected); + gtk_label_set_text(GTK_LABEL(data->mainViewData.fileNameEntry), basename); g_free(basename); g_free(data->openFileName); @@ -962,6 +993,9 @@ closeFile(AppData *data) return FALSE; case GTK_RESPONSE_NO: + if (data->saveFileName) + g_unlink(data->saveFileName); + data->saved = TRUE; return TRUE; case GTK_RESPONSE_YES: @@ -979,7 +1013,7 @@ static const gchar * getFileName(AppData *data) { g_assert(data); - return gtk_entry_get_text(GTK_ENTRY(data->mainViewData.fileNameEntry)); + return gtk_label_get_text(GTK_LABEL(data->mainViewData.fileNameEntry)); } @@ -1083,8 +1117,8 @@ static void cbSaveAs(GtkWidget* widget, AppData *data) data->openFileName = g_strdup(data->saveFileName); } - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.fileNameEntry), - data->saveFileName); + gtk_label_set_text(GTK_LABEL(data->mainViewData.fileNameEntry), + basename); g_free(basename); data->saved = TRUE; @@ -1100,17 +1134,41 @@ static void cbSaveAs(GtkWidget* widget, AppData *data) ULOG_DEBUG("%s() - end", G_STRFUNC); } -static void cbRec(GtkWidget* widget, AppData *data) +static void cbRec(GtkWidget* widget, GdkEventButton *event, AppData *data) { g_assert(NULL != data); ULOG_DEBUG("%s() - begin", G_STRFUNC); + if (APPSTATE_RECORDING == getAppState(data)) + { + if (GST_IS_ELEMENT(data->recPipeline)) + { + gst_element_set_state(GST_ELEMENT(data->recPipeline), GST_STATE_PAUSED); + gtk_label_set_text(GTK_LABEL(data->mainViewData.stateEntry), + RECORDER_MSG_PAUSED); + hildon_banner_show_information(GTK_WIDGET(data->mainView), NULL, RECORDER_MSG_PAUSED); + setAppState(data, APPSTATE_PAUSED); + } + return; + } + + if (APPSTATE_PAUSED == getAppState(data)) + { + if (GST_IS_ELEMENT(data->recPipeline)) + { + gst_element_set_state(GST_ELEMENT(data->recPipeline), + GST_STATE_PLAYING); + setAppState(data, APPSTATE_RECORDING); + return; + } + } + if (APPSTATE_READY != getAppState(data)) { ULOG_WARN("%s() - state different than READY -> return", G_STRFUNC); if (APPSTATE_RECORDING == getAppState(data)) - cbStop(widget,data); + cbStop(widget, NULL,data); return; } @@ -1153,19 +1211,25 @@ static void cbRec(GtkWidget* widget, AppData *data) break; } + g_mkdir(get_default_dir(), 755); + ULOG_INFO("%s() - creating pipelines", G_STRFUNC); /* start recording */ /* create related pipelines */ if (createPipeline(data, PIPELINE_REC)) { ULOG_INFO("%s() - starting recording", G_STRFUNC); + gchar *basename; /* start recording */ + data->rectime = 0; gst_element_set_state(GST_ELEMENT(data->recPipeline), GST_STATE_PLAYING); /* update display */ - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.fileNameEntry), - data->saveFileName); + basename = g_path_get_basename(data->saveFileName); + gtk_label_set_text(GTK_LABEL(data->mainViewData.fileNameEntry), + basename); + g_free(basename); setAppState(data, APPSTATE_RECORDING); gtk_widget_set_sensitive(data->buttonSaveAs, TRUE); @@ -1184,7 +1248,7 @@ static void cbRec(GtkWidget* widget, AppData *data) ULOG_DEBUG("%s() - end", G_STRFUNC); } -static void cbPlay(GtkWidget* widget, AppData *data) +static void cbPlay(GtkWidget* widget, GdkEventButton *event, AppData *data) { const gchar * file = NULL; @@ -1199,19 +1263,22 @@ static void cbPlay(GtkWidget* widget, AppData *data) return; } - openPlayPipeline(data); - if (APPSTATE_PLAYING == getAppState(data)) { if (GST_IS_ELEMENT(data->playPipeline)) { gst_element_set_state(GST_ELEMENT(data->playPipeline), GST_STATE_PAUSED); - setAppState(data, APPSTATE_READY); + setAppState(data, APPSTATE_PAUSED); } return; } - if (APPSTATE_READY != getAppState(data)) + if (APPSTATE_PAUSED != getAppState(data)) { + openPlayPipeline(data); + setAppState(data, APPSTATE_READY); + } + + if (APPSTATE_READY != getAppState(data) && APPSTATE_PAUSED != getAppState(data)) { ULOG_WARN("%s() - state different than PLAYING or READY -> return", G_STRFUNC); return; @@ -1232,10 +1299,12 @@ static void cbPlay(GtkWidget* widget, AppData *data) g_timeout_add(PLAY_UPDATE_INTERVAL, (GSourceFunc)cbCheckPosition, data); + gtk_widget_set_sensitive(data->buttonRec, FALSE); + ULOG_DEBUG("%s() - end", G_STRFUNC); } -static void cbStop(GtkWidget* widget, AppData *data) +static void cbStop(GtkWidget* widget, GdkEventButton *event, AppData *data) { g_assert(NULL != data); @@ -1248,6 +1317,7 @@ static void cbStop(GtkWidget* widget, AppData *data) gtk_widget_set_state(data->buttonPlay, GTK_STATE_NORMAL); gtk_widget_set_state(data->buttonRec, GTK_STATE_NORMAL); gtk_widget_set_sensitive(data->buttonPlay, TRUE); + gtk_widget_set_sensitive(data->buttonRec, TRUE); /* destroy related pipeline */ switch(getAppState(data)) @@ -1259,6 +1329,7 @@ static void cbStop(GtkWidget* widget, AppData *data) gst_element_set_state(GST_ELEMENT(data->playPipeline), GST_STATE_PAUSED); /* flow through */ + case APPSTATE_PAUSED: case APPSTATE_READY: /* seek to zero, but not for PCM pipeline */ /* if (data->playPipelineType == PIPELINE_PLAY || seekToZero(data, GST_ELEMENT(data->playPipeline))) */ @@ -1267,8 +1338,9 @@ static void cbStop(GtkWidget* widget, AppData *data) gtk_adjustment_set_value( GTK_ADJUSTMENT(data->mainViewData.adjustment), 0); gtk_adjustment_value_changed(GTK_ADJUSTMENT(data->mainViewData.adjustment)); - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.stateEntry), - RECORDER_MSG_STOPPED); + gtk_label_set_text(GTK_LABEL(data->mainViewData.ctime), "00:00"); + gtk_label_set_text(GTK_LABEL(data->mainViewData.stateEntry), + ""); } break; @@ -1302,83 +1374,6 @@ static void cbStop(GtkWidget* widget, AppData *data) /* ui construction functions */ -static GtkWidget* createToolBar(AppData *data) -{ - GtkToolbar* toolBar = NULL; - - GtkToolItem* new = NULL; - GtkToolItem* open = NULL; - GtkToolItem* save = NULL; - GtkToolItem* saveas = NULL; - GtkToolItem* sep = NULL; - GtkToolItem* play = NULL; - GtkToolItem* rec = NULL; - GtkToolItem* stop = NULL; - - /* create buttons */ - new = gtk_tool_button_new_from_stock(GTK_STOCK_NEW); - open = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN); - save = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE); - data->buttonSave = GTK_WIDGET(save); - saveas = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE_AS); - data->buttonSaveAs = GTK_WIDGET(saveas); - gtk_widget_set_sensitive(data->buttonSave, FALSE); - gtk_widget_set_sensitive(data->buttonSaveAs, FALSE); - data->saved = TRUE; - - gtk_tool_item_set_expand( GTK_TOOL_ITEM(new), TRUE ); - gtk_tool_item_set_expand( GTK_TOOL_ITEM(open), TRUE ); - gtk_tool_item_set_expand( GTK_TOOL_ITEM(saveas), TRUE ); - - rec = gtk_tool_button_new_from_stock(GTK_STOCK_MEDIA_RECORD); - data->buttonRec = GTK_WIDGET(rec); - play = gtk_tool_button_new_from_stock(GTK_STOCK_MEDIA_PLAY); - data->buttonPlay = GTK_WIDGET(play); - stop = gtk_tool_button_new_from_stock(GTK_STOCK_MEDIA_STOP); - - gtk_tool_item_set_expand( GTK_TOOL_ITEM(rec), TRUE ); - gtk_tool_item_set_expand( GTK_TOOL_ITEM(play), TRUE ); - gtk_tool_item_set_expand( GTK_TOOL_ITEM(stop), TRUE ); - - /* create separator */ - sep = gtk_separator_tool_item_new(); - - /* create the toolbar itself */ - toolBar = GTK_TOOLBAR(gtk_toolbar_new()); - - /* add items to toolbar */ - gtk_toolbar_insert(toolBar, new, -1); - gtk_toolbar_insert(toolBar, open, -1); - gtk_toolbar_insert(toolBar, saveas, -1); - gtk_toolbar_insert(toolBar, sep, -1); - gtk_toolbar_insert(toolBar, rec, -1); - gtk_toolbar_insert(toolBar, play, -1); - gtk_toolbar_insert(toolBar, stop, -1); - - /* connect signals */ - g_signal_connect(G_OBJECT(new), "clicked", - G_CALLBACK(cbNew), - data); - g_signal_connect(G_OBJECT(open), "clicked", - G_CALLBACK(cbOpen), - data); - g_signal_connect(G_OBJECT(saveas), "clicked", - G_CALLBACK(cbSaveAs), - data); - g_signal_connect(G_OBJECT(rec), "clicked", - G_CALLBACK(cbRec), - data); - g_signal_connect(G_OBJECT(play), "clicked", - G_CALLBACK(cbPlay), - data); - g_signal_connect(G_OBJECT(stop), "clicked", - G_CALLBACK(cbStop), - data); - - return GTK_WIDGET(toolBar); - -} - static void cbItemGroupChanged( gpointer data ) { AppData* app = (AppData* ) data; @@ -1421,16 +1416,36 @@ static void cbItemClose(GtkWidget *widget, gpointer data) static void createMenu( AppData *data ) { HildonAppMenu *menu; + GtkWidget *button_new; + GtkWidget *button_open; + GtkWidget *button_save; GtkWidget *button_email; menu = HILDON_APP_MENU( hildon_app_menu_new() ); + button_new = hildon_gtk_button_new(HILDON_SIZE_AUTO); + gtk_button_set_label( GTK_BUTTON(button_new), "New"); + button_open = hildon_gtk_button_new(HILDON_SIZE_AUTO); + gtk_button_set_label( GTK_BUTTON(button_open), "Open"); + button_save = hildon_gtk_button_new(HILDON_SIZE_AUTO); + gtk_button_set_label( GTK_BUTTON(button_save), "Save"); button_email = hildon_gtk_button_new(HILDON_SIZE_AUTO); gtk_button_set_label( GTK_BUTTON(button_email), "Send via email"); + + hildon_app_menu_append( menu, GTK_BUTTON(button_new)); + hildon_app_menu_append( menu, GTK_BUTTON(button_open)); + hildon_app_menu_append( menu, GTK_BUTTON(button_save)); hildon_app_menu_append( menu, GTK_BUTTON(button_email)); - + g_signal_connect(G_OBJECT(button_new), "clicked", + G_CALLBACK(cbNew), + data); + g_signal_connect(G_OBJECT(button_open), "clicked", + G_CALLBACK(cbOpen), + data); + g_signal_connect(G_OBJECT(button_save), "clicked", + G_CALLBACK(cbSaveAs), + data); g_signal_connect( G_OBJECT( button_email ), "clicked", GTK_SIGNAL_FUNC (cbEmailing), data); - gtk_widget_show_all( GTK_WIDGET(menu)); @@ -1438,6 +1453,22 @@ static void createMenu( AppData *data ) data->filter = get_default_filter(); + setFormatString(data, data->filter); + +} + +gboolean +cbScaleRelease(GtkWidget *widget, GdkEventButton *ev, gpointer data) +{ + AppData* app = (AppData* ) data; + + if (getAppState(app) == APPSTATE_RECORDING || NULL == app->playPipeline) + return FALSE; + + seekToTime(app->playPipeline, gtk_adjustment_get_value(app->mainViewData.adjustment)); + + return FALSE; + } gboolean @@ -1447,13 +1478,13 @@ evKeypress(GtkWidget *widget, GdkEventKey *ev, AppData *appdata) switch (ev->keyval) { case GDK_Return: - cbRec(widget, appdata); + cbRec(widget, NULL, appdata); return TRUE; case GDK_Right: - cbPlay(widget, appdata); + cbPlay(widget, NULL, appdata); return TRUE; case GDK_Escape: - cbStop(widget, appdata); + cbStop(widget, NULL, appdata); return TRUE; default: break; @@ -1468,17 +1499,25 @@ gboolean maemo_recorder_ui_new(AppData *data) HildonProgram *app = NULL; HildonWindow *window = NULL; GtkWidget *hbox = NULL; - GtkWidget *vbox = NULL; GtkWidget *label = NULL; - GtkWidget *entry1 = NULL; - GtkWidget *entry2 = NULL; - GtkWidget *entry3 = NULL; + GtkWidget *ctime = NULL; + GtkWidget *etime = NULL; + GtkWidget *filename = NULL; + GtkWidget *format = NULL; + GtkWidget *state = NULL; GtkWidget *toolBar = NULL; GtkWidget *infohbox = NULL; GtkWidget *table = NULL; GtkWidget *scale = NULL; GtkObject *adjustment = NULL; + GtkWidget *rec = NULL; + GtkWidget *play = NULL; + GtkWidget *stop = NULL; + GtkWidget *recimage = NULL; + GtkWidget *playimage = NULL; + GtkWidget *stopimage = NULL; + g_assert(NULL != data); app = HILDON_PROGRAM(hildon_program_get_instance()); @@ -1491,78 +1530,21 @@ gboolean maemo_recorder_ui_new(AppData *data) /* content for main view */ - /* create vbox, divides control area and view area */ - vbox = gtk_vbox_new(FALSE, 0); - /* create hbox to divide control area */ hbox = gtk_hbox_new(FALSE, HILDON_MARGIN_DEFAULT); /* create toolbar */ - toolBar = createToolBar(data); /* create table for labels */ - table = gtk_table_new (4, 2, FALSE); - gtk_table_set_homogeneous(GTK_TABLE(table), FALSE); + table = gtk_table_new (6, 6, TRUE); + gtk_table_set_homogeneous(GTK_TABLE(table), TRUE); gtk_table_set_row_spacings (GTK_TABLE (table), 4); gtk_table_set_col_spacings (GTK_TABLE (table), HILDON_MARGIN_TRIPLE); - label = gtk_label_new_with_mnemonic(_("Filename:")); - gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); - gtk_table_attach_defaults (GTK_TABLE (table), - label, - 0, 1, 0, 1); - - entry1 = gtk_entry_new(); - gtk_entry_set_has_frame(GTK_ENTRY(entry1), FALSE); - gtk_entry_set_text(GTK_ENTRY (entry1), _(RECORDER_FILE_UNTITLED)); - gtk_entry_set_editable(GTK_ENTRY(entry1), FALSE); - gtk_table_attach_defaults(GTK_TABLE (table), entry1, 1, 2, 0, 1); - gtk_label_set_mnemonic_widget(GTK_LABEL (label), entry1); - - label = gtk_label_new_with_mnemonic (_("Length:")); - gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); - gtk_table_attach_defaults (GTK_TABLE (table), - label, - 0, 1, 1, 2); - - entry2 = gtk_entry_new (); - gtk_entry_set_has_frame(GTK_ENTRY(entry2), FALSE); - gtk_entry_set_text (GTK_ENTRY (entry2), "0:00.00"); - gtk_entry_set_editable(GTK_ENTRY(entry2), FALSE); - gtk_table_attach_defaults (GTK_TABLE (table), entry2, 1, 2, 1, 2); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry2); - - /* audio format field */ - label = gtk_label_new_with_mnemonic(_("Format:")); - gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); - gtk_table_attach_defaults (GTK_TABLE (table), - label, - 0, 1, 2, 3); - - entry3 = gtk_entry_new(); - gtk_entry_set_has_frame(GTK_ENTRY(entry3), FALSE); - gtk_entry_set_width_chars(GTK_ENTRY(entry3), 40); - gtk_entry_set_text (GTK_ENTRY (entry3), RECORDER_FMT_STRING_NONE); - gtk_entry_set_editable(GTK_ENTRY(entry3), FALSE); - data->mainViewData.formatEntry = GTK_WIDGET(entry3); - - gtk_table_attach_defaults (GTK_TABLE (table), entry3, 1, 2, 2, 3); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry3); - - label = gtk_label_new_with_mnemonic(_("State:")); - gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); - gtk_table_attach_defaults (GTK_TABLE (table), - label, - 0, 1, 3, 4); - - entry3 = gtk_entry_new (); - gtk_entry_set_has_frame(GTK_ENTRY(entry3), FALSE); - gtk_entry_set_text (GTK_ENTRY (entry3), RECORDER_MSG_READY); - gtk_entry_set_editable(GTK_ENTRY(entry3), FALSE); - gtk_table_attach_defaults (GTK_TABLE (table), entry3, 1, 2, 3, 4); - gtk_label_set_mnemonic_widget(GTK_LABEL (label), entry3); - + filename = gtk_label_new(_(RECORDER_FILE_UNTITLED)); + format = gtk_label_new(RECORDER_FMT_STRING_NONE); + state = gtk_label_new(""); adjustment = gtk_adjustment_new (0.00, 0.00, 100.00, @@ -1570,36 +1552,73 @@ gboolean maemo_recorder_ui_new(AppData *data) 0.01, 0); + ctime = gtk_label_new("00:00"); + etime = gtk_label_new("00:00"); scale = gtk_hscale_new(GTK_ADJUSTMENT(adjustment)); + gtk_scale_set_draw_value(scale, FALSE); + gtk_box_pack_start(hbox, ctime, FALSE, FALSE, HILDON_MARGIN_DOUBLE); + gtk_box_pack_end(hbox, etime, FALSE, FALSE, HILDON_MARGIN_DOUBLE); + gtk_box_pack_end(hbox, scale, TRUE, TRUE, HILDON_MARGIN_DOUBLE); + gtk_box_set_homogeneous(hbox, FALSE); -/* gtk_table_attach_defaults (GTK_TABLE (table), - label, - 0, 3, 2, 3); -*/ + gtk_table_attach_defaults(table, filename, + 1, 4, 1, 2); + gtk_table_attach_defaults(table, format, + 1, 4, 2, 3); + gtk_table_attach_defaults(table, state, + 1, 4, 3, 4); + gtk_table_attach_defaults(table, hbox, + 0, 5, 5, 6); + + + recimage = gtk_image_new_from_file(REC_ICON); + rec = gtk_event_box_new(); + data->buttonRec = GTK_WIDGET(rec); + gtk_container_add(rec, recimage); + playimage = gtk_image_new_from_file(PLAY_ICON); + play = gtk_event_box_new(); + data->buttonPlay = GTK_WIDGET(play); + gtk_container_add(play, playimage); + stopimage = gtk_image_new_from_file(STOP_ICON); + stop = gtk_event_box_new(); + gtk_container_add(stop, stopimage); + + gtk_table_attach_defaults(table, rec, + 5, 6, 4, 6); + gtk_table_attach_defaults(table, play, + 5, 6, 2, 4); + gtk_table_attach_defaults(table, stop, + 5, 6, 0, 2); + + /* connect signals */ - g_signal_connect(G_OBJECT(adjustment), "value-changed", G_CALLBACK(cbUserSeek), data); - g_signal_connect(G_OBJECT(scale), "format-value", G_CALLBACK(cbFormatSeekbarValue), data); + g_signal_connect(G_OBJECT(scale), "button-release-event", G_CALLBACK(cbScaleRelease), data); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(cbDestroy), data); g_signal_connect(G_OBJECT(window), "key-press-event", G_CALLBACK(evKeypress), data); + g_signal_connect(G_OBJECT(rec), "button-release-event", + G_CALLBACK(cbRec), + data); + g_signal_connect(G_OBJECT(play), "button-release-event", + G_CALLBACK(cbPlay), + data); + g_signal_connect(G_OBJECT(stop), "button-release-event", + G_CALLBACK(cbStop), + data); + + /* packing the view */ - gtk_container_add (GTK_CONTAINER(window), vbox); - infohbox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start (GTK_BOX(infohbox), table, FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX(vbox), infohbox, FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX(vbox), scale, FALSE, FALSE, 0); -/* gtk_box_pack_start (GTK_BOX(vbox), hbox, TRUE, TRUE, 0); */ + gtk_container_add(GTK_CONTAINER(window), table); - hildon_window_add_toolbar(window, GTK_TOOLBAR(toolBar)); - /* store needed widgets */ data->app = app; data->mainView = window; - data->mainViewData.toolBar = GTK_WIDGET(toolBar); - data->mainViewData.fileNameEntry = GTK_WIDGET(entry1); - data->mainViewData.lengthEntry = GTK_WIDGET(entry2); - data->mainViewData.stateEntry = GTK_WIDGET(entry3); + data->mainViewData.fileNameEntry = GTK_WIDGET(filename); + data->mainViewData.formatEntry = GTK_WIDGET(format); + data->mainViewData.lengthEntry = GTK_WIDGET(etime); + data->mainViewData.ctime = GTK_WIDGET(ctime); + data->mainViewData.stateEntry = GTK_WIDGET(state); data->mainViewData.adjustment = GTK_OBJECT(adjustment); /* show the app */ @@ -1684,7 +1703,7 @@ setFormatString(AppData *data, AudioFormat afmt) gint bits = 8; g_assert(data); - g_assert(GTK_IS_ENTRY(data->mainViewData.formatEntry)); + g_assert(GTK_IS_LABEL(data->mainViewData.formatEntry)); switch (afmt) { @@ -1709,12 +1728,12 @@ setFormatString(AppData *data, AudioFormat afmt) bits = PCM_WIDTH; break; default: - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.formatEntry), RECORDER_FMT_STRING_NONE); + gtk_label_set_text(GTK_LABEL(data->mainViewData.formatEntry), RECORDER_FMT_STRING_NONE); return; } - str = g_strdup_printf("%s, %d %s, %d Hz, %d %s", format, channels, _("ch"), rate, bits, _("bits")); - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.formatEntry), str); + str = g_strdup_printf("%s, %d %s, %d kHz, %d %s", format, channels, _("ch"), rate/1000, bits, _("bits")); + gtk_label_set_text(GTK_LABEL(data->mainViewData.formatEntry), str); g_free(str); } @@ -1740,12 +1759,12 @@ static void setLength(AppData *data, gdouble secs) secs -= mins * 60.0; } - tmp = g_strdup_printf("%u:%05.2f", mins, secs); + tmp = g_strdup_printf("%02u:%02d", mins, (int)secs); /* ULOG_INFO("Setting length to %s", tmp); */ - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.lengthEntry), + gtk_label_set_text(GTK_LABEL(data->mainViewData.lengthEntry), tmp); g_free(tmp); } @@ -1846,13 +1865,12 @@ static gboolean cbStopPlayback(AppData *data) static void cbUserSeek(GtkAdjustment *adjustment, gpointer data) { - /*ULOG_INFO("cbUserSeek");*/ AppData *app; g_return_if_fail(data != NULL); app = (AppData *) data; - if (getAppState(app) != APPSTATE_READY || NULL == app->playPipeline) + if (getAppState(app) != APPSTATE_READY && getAppState(app) != APPSTATE_PAUSED || NULL == app->playPipeline) return; seekToTime(app->playPipeline, gtk_adjustment_get_value(adjustment)); @@ -1881,22 +1899,13 @@ static gboolean cbUpdateRecLength(AppData *data) gdouble secs; gchar *tmp; - if (gettimeofday(&tv, NULL) != 0) - return FALSE; + data->rectime += REC_UPDATE_INTERVAL/1000.0; - secs = tv.tv_sec - data->recStartTv.tv_sec; - secs += ((tv.tv_usec - data->recStartTv.tv_usec) / 1000000.0); - - if (secs >= 60.0) - { - mins = secs / 60; - secs -= mins * 60.0; - tmp = g_strdup_printf("%u:%05.2f", mins, secs); - } - else - tmp = g_strdup_printf("%0.2f", secs); + mins = data->rectime / 60; + secs = data->rectime - (mins * 60.0); + tmp = g_strdup_printf("%02u:%02d", mins, (int)secs); - gtk_entry_set_text(GTK_ENTRY(data->mainViewData.lengthEntry), + gtk_label_set_text(GTK_LABEL(data->mainViewData.lengthEntry), tmp); g_free(tmp); diff --git a/src/maemo-recorder.h b/src/maemo-recorder.h index 55e4e37..4a3f66d 100644 --- a/src/maemo-recorder.h +++ b/src/maemo-recorder.h @@ -66,7 +66,8 @@ typedef enum { APPSTATE_READY = 1, APPSTATE_PLAYING, - APPSTATE_RECORDING + APPSTATE_RECORDING, + APPSTATE_PAUSED } AppState; typedef enum @@ -89,6 +90,10 @@ typedef enum #define FORMAT_NAME_PCM "PCM raw" #define FORMAT_NAME_ILBC "iLBC" +#define PLAY_ICON "/usr/share/pixmaps/recorder/play.png" +#define REC_ICON "/usr/share/pixmaps/recorder/record.png" +#define STOP_ICON "/usr/share/pixmaps/recorder/stop.png" + /* TODO: this kind of struct might be more handy when passing around audioformat info */ #if 0 struct _AudioFormatSpec @@ -121,7 +126,7 @@ typedef struct _mainViewStr GtkWidget *stateEntry; GtkWidget *formatEntry; GtkObject *adjustment; - + GtkWidget *ctime; } mainViewStr; typedef struct _AppDataStr @@ -159,10 +164,9 @@ typedef struct _AppDataStr GtkWidget *buttonPlay; GtkWidget *buttonRec; - struct timeval recStartTv; /* timeval when recording started */ guint recUpdateId; /* g_source_id for rec update timeout func */ gchar *mimeURI; /* uri to open via mime cb */ - + gdouble rectime; } AppData; void setAppState(AppData *app, AppState state); diff --git a/src/settings.c b/src/settings.c index 4afcc73..2147f2b 100755 --- a/src/settings.c +++ b/src/settings.c @@ -68,7 +68,7 @@ reset_defaults() { gchar *str; - str = g_strdup_printf("/home/user/MyDocs/.sounds"); + str = g_strdup_printf("/home/user/MyDocs/.recorder"); gconf_client_set_string(settings_priv->gconf, KEY_DEFAULT_DIR, str, NULL); g_free(settings_priv->default_dir); settings_priv->default_dir = str; -- 1.7.9.5