On 16/01/12 06:56, Carlos R. Mafra wrote:
> On Tue, 10 Jan 2012 at 0:34:53 +0100, Rodolfo kix Garcia wrote:
>>
>> Why we can change the name using right click on the Clip. Why? because
>> the clip is using the functions of WINGs. Can we change the menu
>> functions to WINGs?... probably yes, but I don't know. Probably the full
>> code of menu should be re-written.
>>
>> Can somebody put more light here? Ideas?
>
> I've just finished a dirty hack to deal with this using WINGs.
>
> I mimicked what happens when you use the Clip, so when you left-click
> the menu entry holding the Ctrl key, the same input dialog appears
> asking for the new name. Surprisingly, the overall patch removes
> ~60 lines of code (because you can get rid of editEntry).
>
> Right now the dialog appears under the menu (because both appear
> in the middle of the screen). Perhaps it will not be difficult to
> make the dialog appear shifted to the right or left, but I haven't
> looked at that now. I just wanted a proof of concept.
>
> What do people think about changing this behavior? Instead of
> editing the menu entry directly and facing the deadkey limitations of
> XLookupString() like Rodolfo pointed out or getting an input dialog
> like a rename via the Clip?
IMO the new code is better than the current code, and we remove "low-level"
code (X11 functions like XGrab,...) , therefore I like this change.
>
> I tend to choose the one that works in all cäsés.
>
> But I might be missing something too. Comments?
>
[snip]
> + char buffer[128];
I don't like this things, I prefer "char buffer[DOCK_NAME_LEN]" and set
DOCK_NAME_LEN in dock.h Probably we should find if this length is used in other
places in the code.
> + char *name;
> + int wks_no = entry_no - 2;
> +
> + name = wstrdup(scr->workspaces[wks_no]->name);
> + snprintf(buffer, sizeof(buffer), _("Type the name for
> workspace %i:"), wks_no + 1);
probably this is wrong, Is too early and I wake up 5 seconds ago but probably
if the buffer length is 128 we have a buffer overflow. Correct:
snprintf(buffer, sizeof(buffer) -1, _("Type the name for workspace %i:"),
wks_no + 1);
Or using the previous stuff:
snprintf(buffer, DOCK_NAME_LEN -1, _("Type the name for workspace %i:"), wks_no
+ 1);
> +
> + if (wInputDialog(scr, _("Rename Workspace"), buffer,
> &name))
> + wWorkspaceRename(scr, wks_no, name);
> +
> + if (name)
> + wfree(name);
> +
> goto byebye;
> } else if (bev->state & ControlMask) {
> goto byebye;
byebye: :-)
Cheers,
kix
--
||// //\\// Rodolfo "kix" Garcia
||\\// //\\ http://www.kix.es/
--
To unsubscribe, send mail to [email protected].